{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Intro to Distributed Alignment Search (DAS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "__author__ = \"Atticus Geiger\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Contents\n",
    "\n",
    "1. [The hierarchical equality task](#The-hierarchical-equality-task)\n",
    "    1. [An Algorithm that Solves the Equality Task](#An-Algorithm-that-Solves-the-Equality-Task)\n",
    "        1. [The algorithm with no intervention](#The-algorithm-with-no-intervention)\n",
    "        1. [The algorithm with an intervention](#The-algorithm-with-an-intervention)\n",
    "        1. [The algorithm with an interchange intervention](#The-algorithm-with-an-interchange-intervention)\n",
    "    1. [Hand Crafting an MLP to Solve Hierarchical Equality](#Hand-Crafting-an-MLP-to-Solve-Hierarchical-Equality)        \n",
    "    1. [Training an MLP to Solve Hierarchical Equality](#Training-an-MLP-to-Solve-Hierarchical-Equality)\n",
    "1. [Causal abstraction Analysis](#Causal-abstraction)\n",
    "    1. [Basic intervention: zeroing out part of a hidden layer](#Basic-intervention:-zeroing-out-part-of-a-hidden-layer)\n",
    "    1. [An interchange intervention](#An-interchange-intervention)\n",
    "    1. [Alignment](#Alignment)\n",
    "    1. [Evaluating an Alignment](#Evaluation)\n",
    "1. [Distributed Alignment Search (DAS)](#Distributed-Alignment-Search)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Set-up\n",
    "\n",
    "This notebook is a hands-on introduction to __causal abstraction analysis__ [Geiger*, Lu*, Icard, and Potts (2020)](https://arxiv.org/pdf/2106.02997.pdf) using __distributed alignment search__ [Geiger*, Wu*, Potts, Icard, and Goodman (2020)](https://arxiv.org/pdf/2303.02536.pdf).\n",
    "\n",
    "In causal abstraction analysis, we assess whether trained models conform to high-level causal models that we specify, not just in terms of their input–output behavior, but also in terms of their internal dynamics. The core technique is the __interchange intervention__, in which a causal model is provided an input and then intermediate variables are fixed to take on the values they would have for a second input.\n",
    "\n",
    "To motivate and illustrate these concepts, we're going to focus on a hierarchical equality task, building on work by [Geiger, Carstensen, Frank, and Potts (2020)](https://arxiv.org/abs/2006.07968)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    # This library is our indicator that the required installs\n",
    "    # need to be done.\n",
    "    import pyvene\n",
    "\n",
    "except ModuleNotFoundError:\n",
    "    !pip install git+https://github.com/stanfordnlp/pyvene.git"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "from datasets import Dataset\n",
    "import random\n",
    "import copy\n",
    "import itertools\n",
    "import numpy as np\n",
    "from tqdm import tqdm, trange\n",
    "\n",
    "from sklearn.metrics import classification_report\n",
    "from transformers import get_linear_schedule_with_warmup\n",
    "\n",
    "from pyvene import CausalModel\n",
    "from pyvene.models.mlp.modelings_mlp import MLPConfig\n",
    "from pyvene import create_mlp_classifier\n",
    "from pyvene import (\n",
    "    IntervenableModel,\n",
    "    VanillaIntervention,\n",
    "    RotatedSpaceIntervention,\n",
    "    LowRankRotatedSpaceIntervention,\n",
    "    RepresentationConfig,\n",
    "    IntervenableConfig,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch._C.Generator at 0x15308f04db0>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "seed = 42\n",
    "np.random.seed(seed)\n",
    "random.seed(seed)\n",
    "torch.manual_seed(seed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The hierarchical equality task\n",
    "\n",
    "This section builds on results presented in [Geiger, Carstensen, Frank, and Potts (2020)](https://arxiv.org/abs/2006.07968). We will use a hierarchical equality task ([Premack 1983](https://www.cambridge.org/core/services/aop-cambridge-core/content/view/7DF6F2D22838F7546AF7279679F3571D/S0140525X00015077a.pdf/div-class-title-the-codes-of-man-and-beasts-div.pdf)) to illustrate the concepts. \n",
    "\n",
    "We define the hierarchical equality task as follows: The input is two pairs of objects and the output is **True** if both pairs contain the same object or if both pairs contain different objects and **False** otherwise.  For example, `AABB` and `ABCD` are both labeled **True**, while `ABCC` and `BBCD` are both labeled **False**. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## An Algorithm that Solves the Equality Task\n",
    "\n",
    "Let $\\mathcal{A}$ be the simple tree-structured algorithm that solves this task by applying a simple equality relation three times: Compute whether the first two inputs are equal, compute whether the second two inputs are equal, then compute whether the truth-valued outputs of these first two computations are equal. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And here's a Python implementation of $\\mathcal{A}$ that supports the interventions we'll want to do:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def randvec(n=50, lower=-1, upper=1):\n",
    "    return np.array([round(random.uniform(lower, upper), 2) for i in range(n)])\n",
    "\n",
    "\n",
    "embedding_dim = 2\n",
    "number_of_entities = 20\n",
    "\n",
    "variables = [\"W\", \"X\", \"Y\", \"Z\", \"WX\", \"YZ\", \"O\"]\n",
    "\n",
    "reps = [randvec(embedding_dim, lower=-1, upper=1) for _ in range(number_of_entities)]\n",
    "values = {variable: reps for variable in [\"W\", \"X\", \"Y\", \"Z\"]}\n",
    "values[\"WX\"] = [True, False]\n",
    "values[\"YZ\"] = [True, False]\n",
    "values[\"O\"] = [True, False]\n",
    "\n",
    "parents = {\n",
    "    \"W\": [],\n",
    "    \"X\": [],\n",
    "    \"Y\": [],\n",
    "    \"Z\": [],\n",
    "    \"WX\": [\"W\", \"X\"],\n",
    "    \"YZ\": [\"Y\", \"Z\"],\n",
    "    \"O\": [\"WX\", \"YZ\"],\n",
    "}\n",
    "\n",
    "\n",
    "def FILLER():\n",
    "    return reps[0]\n",
    "\n",
    "\n",
    "functions = {\n",
    "    \"W\": FILLER,\n",
    "    \"X\": FILLER,\n",
    "    \"Y\": FILLER,\n",
    "    \"Z\": FILLER,\n",
    "    \"WX\": lambda x, y: np.array_equal(x, y),\n",
    "    \"YZ\": lambda x, y: np.array_equal(x, y),\n",
    "    \"O\": lambda x, y: x == y,\n",
    "}\n",
    "\n",
    "pos = {\n",
    "    \"W\": (0.2, 0),\n",
    "    \"X\": (1, 0.1),\n",
    "    \"Y\": (2, 0.2),\n",
    "    \"Z\": (2.8, 0),\n",
    "    \"WX\": (1, 2),\n",
    "    \"YZ\": (2, 2),\n",
    "    \"O\": (1.5, 3),\n",
    "}\n",
    "\n",
    "equiv_classes = {}\n",
    "\n",
    "equality_model = CausalModel(variables, values, parents, functions, pos=pos)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's a visual depiction of the algorithm:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2XR15avVsX5H9W3Vl3emAfxA3Up19UXXL5S+L13jV4w/73O7xtEa+ir2K+25co/KdSpnsBqAv2BsADivlStX6r777tOvv/4qSWpWrZke7/i4JCkzO1Pdo7rrg1kfaO6cubqt2W18ejDgpyIui1Byx2RJ0uqfV+vadtfqoUcf0kv/95LqV66v8LBwzZgxQ1/9/pXW/L5G1157rT755BO1bNnScDkAX8ZpVADO6e2339aNN96o3bt3//lrx48f//M/h+aFat6b86Rd0pwJcxgaQIBIjk2WdktfvPmFGlVo9Odz+9Tn/+7du3XjjTdq6tSppjIB+AHGBoCzeuGFF/T0008rJydH+fn5f/76qS82JkyYoMzMTEnS5MmTtX379mLvBOBZv/zyi9566y1JUmZmpiZM+OvzM059/ufn5ys7O1v//ve/9eKLLxZ3JgA/wdgAcFY///yzJCk0NPTPXwsJCfnzxcaxY8c0YsSI075m5MiRxRcIwCv+/rweMWKEjh07JqlgbISE/PXS4eS/H3766afiCwTgVxgbAM7qww8/1FdffaUrr7xSUsGLivz8fGVlZUkqOKqxf//+P++fl5enSZMmcXQD8GO//PKLJk+erLy8vD9/bf/+/X8e3cjKylJ+fv6fI6N69er6+uuv9eGHHxrpBeD7GBsAzspms6lhw4bat2+fBg0apC5duig0NFTly5dXdna2RowYIbfbfdrX5ObmyrIsQ8UALpVlWacNDUlyu90aMWKEsrOzVaFCBYWGhqpLly4aOHCg9u7dqwYNGshmsxkqBuDreDcqAOeUlJSksLAwvfLKK6pYsaLGjh2rMmXKKC8vT9dff7327t2r33//XVu3btU//vEPhYSEqG7duqazAVykq6++Wm3atFF+fr5WrFihevXqqWrVqrr88sslSc8884y6dOmicuXK6Y8//tCbb76p5ORkTqEEcE42999/NHkWGRkZqlChgg4dOqTy5csXRxcAwzIyMlS7dm316tVLLpfrnPd7++239fTTT+v48eMKCwsrxkIA3pKdna2SJUtqypQp+ve//33O+0VHR2vixInavn07rw+AIFKUbcBpVADOasKECTp27JgGDx5sOgWAjxo8eLCOHj2qN954w3QKAB/F2ABwhuPHjyshIUFdu3ZV9erVTecA8FE1atRQ165dlZCQcNrb4gLASYwNAGd45513tHv3bkVHR5tOAeDjoqOj9euvv2ratGmmUwD4IMYGgNPk5+crJiZG999/vxo1amQ6B4CPa9y4se6//365XK7TPgAUACTGBoC/mTNnjtavXy+n02k6BYCfcDqdWr9+vT7++GPTKQB8DGMDwJ/cbrcsy9Ktt96qG264wXQOAD9x44036pZbbpFlWWd8/g6A4MbYAPCnb775Rt999x1HNQAUmdPp1LfffqtFixaZTgHgQxgbAP5kWZaaNWumjh07mk4B4Gc6deqkpk2byrIs0ykAfAhjA4Akac2aNUpNTZXD4ZDNZjOdA8DP2Gw2ORwOffrpp1q7dq3pHAA+grEBQJLkcrlUu3ZtPf7446ZTAPipJ554QrVr15bL5TKdAsBHMDYA6JdfftH06dMVGRmpEiVKmM4B4KdKlCihoUOHavr06dq+fbvpHAA+gLEBQPHx8apYsaKeeeYZ0ykA/FyPHj1Uvnx5xcfHm04B4AMYG0CQ279/v1JSUtS/f3+VLVvWdA4AP1e2bFn1799fEydO1P79+03nADCMsQEEudGjR8vtdqt///6mUwAEiAEDBsjtdmvMmDGmUwAYxtgAgtiRI0c0atQo9ejRQ1WrVjWdAyBAVK1aVc8884xGjRqlo0ePms4BYBBjAwhikydP1h9//KGhQ4eaTgEQYIYOHaqDBw9q8uTJplMAGMTYAIJUTk6O4uLi9Pjjj6tOnTqmcwAEmLp16+qxxx5TXFyccnNzTecAMISxAQSp999/X7/88oscDofpFAAByuFwaNu2bXr//fdNpwAwhLEBBCG32y2Xy6W7775b1157rekcAAGqRYsWuuuuu+RyueR2u03nADCAsQEEoc8//1yrV6+W0+k0nQIgwDmdTv3444/64osvTKcAMICxAQQhy7LUpk0b3XbbbaZTAAS422+/Xa1bt5ZlWaZTABjA2ACCzLJly/Tll1/K6XTKZrOZzgEQ4Gw2m5xOp9LS0rR8+XLTOQCKGWMDCDKWZalhw4a6//77TacACBIPPPCAGjRowNENIAgxNoAgsn79en300UeKjo5WaGio6RwAQSI0NFTR0dGaNWuWNmzYYDoHQDFibABBJDY2VtWqVVPXrl1NpwAIMl27dtUVV1yh2NhY0ykAihFjAwgSv/32m95++20NHjxYJUuWNJ0DIMiUKlVKgwcP1pQpU/Tbb7+ZzgFQTBgbQJBITExUqVKl1Lt3b9MpAIJUnz59VLJkSSUlJZlOAVBMGBtAEDh06JDGjx+vPn36qEKFCqZzAASpChUqqE+fPho3bpwOHTpkOgdAMWBsAEFg/PjxysrK0uDBg02nAAhygwcPVlZWliZMmGA6BUAxYGwAAS4rK0uJiYn697//rSuvvNJ0DoAgV716dXXt2lWJiYk6fvy46RwAXsbYAALc1KlTtWfPHkVHR5tOAQBJUnR0tHbv3q2pU6eaTgHgZYwNIIDl5eUpJiZGDz74oBo2bGg6BwAkSY0aNdIDDzygmJgY5eXlmc4B4EWMDSCAzZ49Wxs3bpTT6TSdAgCncTqd2rBhg+bMmWM6BYAXMTaAAOV2u2VZlm6//Xa1adPGdA4AnOb666/XbbfdJsuy5Ha7TecA8BLGBhCgvvrqKy1fvpyjGgB8ltPp1LJly/T111+bTgHgJYwNIEBZlqVrr71Wd911l+kUADiru+++W82bN5dlWaZTAHgJYwMIQD/++KM+++wzORwO2Ww20zkAcFY2m00Oh0Pz5s3T6tWrTecA8ALGBhCAXC6X6tSpo8cee8x0CgCc1+OPP66rrrpKLpfLdAoAL2BsAAFm27Zteu+99xQZGSm73W46BwDOy263KzIyUjNmzNC2bdtM5wDwMMYGEGDi4uJUsWJFdevWzXQKABRK9+7dVbFiRcXHx5tOAeBhjA0ggOzbt0+TJk3SgAEDVLZsWdM5AFAoZcuWVf/+/ZWSkqLff//ddA4AD2JsAAFk9OjRstls6t+/v+kUACiSk//eGj16tOESAJ7E2AACxJEjRzR69Gj16NFDVapUMZ0DAEVStWpV9ejRQ6NGjdKRI0dM5wDwEMYGECBSUlJ06NAhDR061HQKAFyUoUOH6tChQ5o0aZLpFAAewtgAAkBOTo7i4+PVpUsXXXXVVaZzAOCi1KlTR0888YTi4uKUk5NjOgeABzA2gAAwY8YMbd++XQ6Hw3QKAFwSh8Oh7du367333jOdAsADGBuAn3O73XK5XOrUqZOaNWtmOgcALknz5s3VsWNHuVwuud1u0zkALhFjA/Bz8+bN09q1a+V0Ok2nAIBHOJ1OrVmzRp999pnpFACXiLEB+DnLsnTDDTfolltuMZ0CAB5x66236vrrr5dlWaZTAFwixgbgx7799lt9/fXXcjqdstlspnMAwCNsNpucTqe++uorfffdd6ZzAFwCxgbgxyzLUqNGjXTfffeZTgEAj7r//vvVsGFDjm4Afo6xAfipn3/+WXPmzFF0dLRCQngqAwgsISEhio6O1uzZs7V+/XrTOQAuEq9QAD8VExOjK6+8Uv/6179MpwCAV3Tt2lXVqlVTTEyM6RQAF4mxAfihXbt2aerUqRo8eLBKlixpOgcAvKJkyZIaPHiwpk6dql9//dV0DoCLwNgA/FBiYqLKlCmj3r17m04BAK/q3bu3SpUqpcTERNMpAC4CYwPwM3/88YcmTJigvn37qnz58qZzAMCrKlSooL59+2r8+PH6448/TOcAKCLGBuBnxo0bp+zsbA0aNMh0CgAUi0GDBun48eMaP3686RQARcTYAPxIVlaWkpKS9PTTT6tatWqmcwCgWFx55ZV6+umnlZiYqKysLNM5AIqAsQH4kSlTpmjv3r2KiooynQIAxSoqKkp79+7V22+/bToFQBEwNgA/kZeXp9jYWD388MNq0KCB6RwAKFYNGzbUQw89pNjYWOXl5ZnOAVBIjA3AT3z00UfatGmTnE6n6RQAMMLpdGrjxo2aPXu26RQAhcTYAPyA2+2WZVlq3769WrVqZToHAIxo3bq12rVrJ8uy5Ha7TecAKATGBuAH0tLStGLFCo5qAAh6TqdTy5cv15dffmk6BUAhMDYAP2BZllq0aKEOHTqYTgEAo+68805de+21sizLdAqAQmBsAD7u+++/1xdffCGHwyGbzWY6BwCMstlscjgc+vzzz/XDDz+YzgFwAYwNwMe5XC7VrVtXjz76qOkUAPAJjz32mOrUqSOXy2U6BcAFMDYAH7Zlyxa9//77ioyMlN1uN50DAD7BbrcrMjJS7733nrZu3Wo6B8B5MDYAHxYXF6fKlSurW7duplMAwKd0795dlStXVlxcnOkUAOfB2AB81N69ezV58mQNHDhQZcqUMZ0DAD6lTJkyGjBggCZPnqx9+/aZzgFwDowNwEeNGjVKoaGhevbZZ02nAIBPevbZZ2Wz2TRq1CjTKQDOgbEB+KDMzEyNGTNGPXv2VOXKlU3nAIBPqlKlinr27KnRo0crMzPTdA6As2BsAD5o4sSJOnz4sIYOHWo6BQB82tChQ3X48GGlpKSYTgFwFowNwMfk5OQoPj5eTz75pGrVqmU6BwB8Wu3atdWlSxfFx8crJyfHdA6Av2FsAD5m+vTp2rlzpxwOh+kUAPALDodDO3bs0IwZM0ynAPgbxgbgQ/Lz8+VyudS5c2ddc801pnMAwC80bdpU99xzj1wul9xut+kcAKdgbAA+JDU1VevWrZPT6TSdAgB+xel0au3atUpNTTWdAuAUjA3Ah1iWpRtvvFFt27Y1nQIAfuXmm2/WDTfcIMuyTKcAOAVjA/ARS5Ys0aJFi+R0OmWz2UznAIBfsdlscjqd+uabb7R06VLTOQBOYGwAPsKyLDVp0kT33nuv6RQA8Ev33XefGjduzNENwIcwNgAfkJ6ero8//ljR0dEKCeFpCQAXIyQkRNHR0ZozZ45++ukn0zkAxNgAfEJMTIxq1Kihp556ynQKAPi1p556StWrV1dMTIzpFABibADG7dy5U9OmTdOQIUMUFhZmOgcA/FrJkiU1ZMgQvfPOO9q5c6fpHCDoMTYAwxISElS2bFn16tXLdAoABIRevXqpTJkySkxMNJ0CBD3GBmDQwYMH9cYbb6hfv34qV66c6RwACAjly5dXv379NGHCBB08eNB0DhDUGBuAQWPHjlVOTo4GDhxoOgUAAsqgQYOUk5OjcePGmU4BghpjAzDk2LFjSkpKUrdu3XTFFVeYzgGAgHLFFVfoP//5j5KSknTs2DHTOUDQYmwAhkyZMkX79+9XVFSU6RQACEhRUVH6/fff9fbbb5tOAYIWYwMwIC8vT7GxsXrkkUd09dVXm84BgIBUv359Pfzww4qNjVVeXp7pHCAoMTYAA2bOnKnNmzfL4XCYTgGAgOZwOLRp0ybNmjXLdAoQlBgbQDFzu92yLEv//Oc/9Y9//MN0DgAEtFatWql9+/ayLEtut9t0DhB0GBtAMVuwYIFWrVolp9NpOgUAgoLT6dTKlSu1cOFC0ylA0GFsAMXMsixdd911uuOOO0ynAEBQ6NChg6677jpZlmU6BQg6jA2gGK1cuVL/+9//5HQ6ZbPZTOcAQFCw2WxyOByaP3++Vq1aZToHCCqMDaAYuVwu1atXTw8//LDpFAAIKo888ojq1q0rl8tlOgUIKowNoJhs3rxZH374oaKiomS3203nAEBQsdvtioqK0gcffKDNmzebzgGCBmMDKCaxsbGqWrWq/vOf/5hOAYCg1K1bN1WpUkVxcXGmU4CgwdgAisGePXv05ptvauDAgSpdurTpHAAISqVLl9bAgQP15ptvau/evaZzgKDA2ACKQXJyskqUKKF+/fqZTgGAoNavXz+FhoYqOTnZdAoQFBgbgJcdPnxYY8eOVa9evVSpUiXTOQAQ1CpXrqxevXppzJgxOnz4sOkcIOAxNgAvmzhxojIzMzVkyBDTKQAASUOGDFFmZqZSUlJMpwABj7EBeFF2drbi4+P11FNPqWbNmqZzAACSatWqpSeffFLx8fHKzs42nQMENMYG4EXvvvuudu3aJYfDYToFAHAKh8OhnTt3avr06aZTgIDG2AC8JD8/Xy6XS/fee68iIiJM5wAATnHNNdeoc+fOcrlcys/PN50DBCzGBuAlc+fO1U8//SSn02k6BQBwFk6nU+np6fr0009NpwABi7EBeIllWWrbtq3atm1rOgUAcBY333yzbrrpJlmWZToFCFiMDcALFi1apCVLlnBUAwB8nNPp1OLFi7V48WLTKUBAYmwAXmBZliIiInTPPfeYTgEAnEfnzp0VERHB0Q3ASxgbgIetXbtWc+fOlcPhUEgITzEA8GUhISGKjo7WJ598onXr1pnOAQIOr4QAD4uJiVHNmjXVpUsX0ykAgEJ48sknVbNmTcXExJhOAQIOYwPwoO3bt+vdd9/V0KFDFRYWZjoHAFAIYWFhGjJkiKZNm6YdO3aYzgECCmMD8KCEhASVK1dOPXv2NJ0CACiCnj17Kjw8XAkJCaZTgIDC2AA85MCBA5o4caKeffZZhYeHm84BABRBuXLl9Oyzz+qNN97QgQMHTOcAAYOxAXjI2LFjlZeXpwEDBphOAQBchAEDBig3N1fjxo0znQIEDMYG4AHHjh1TcnKyunXrpssvv9x0DgDgIlxxxRXq1q2bkpKSdOzYMdM5QEBgbAAe8Oabb2r//v2KiooynQIAuARRUVHav3+/3nrrLdMpQEBgbACXKDc3V7GxsXr00UdVr1490zkAgEtw9dVX65FHHlFsbKxyc3NN5wB+j7EBXKIPP/xQW7duldPpNJ0CAPAAp9OpLVu2aObMmaZTAL/H2AAugdvtlmVZ6tChg6677jrTOQAAD2jZsqXuuOMOWZYlt9ttOgfwa4wN4BLMnz9fP/zwA0c1ACDAOJ1Off/99/rf//5nOgXwa4wN4BJYlqV//OMfat++vekUAIAH/fOf/1TLli1lWZbpFMCvMTaAi7RixQotXLhQTqdTNpvNdA4AwINsNpucTqcWLFiglStXms4B/BZjA7hIlmWpfv36euihh0ynAAC84OGHH9bVV1/N0Q3gEjA2gIuwceNGzZw5U1FRUQoNDTWdAwDwgtDQUEVFRWnmzJnatGmT6RzALzE2gIsQGxuryy67TE8//bTpFACAFz399NOqWrWqYmNjTacAfomxARTR7t27NWXKFA0aNEilSpUynQMA8KLSpUtr4MCBeuutt7R7927TOYDfYWwARZScnKwSJUqob9++plMAAMWgX79+KlGihEaNGmU6BfA7jA2gCDIyMjR27Fj17t1blSpVMp0DACgGlSpVUq9evTR27FgdPnzYdA7gVxgbQBG88cYbOnr0qIYMGWI6BQBQjIYMGaIjR47ojTfeMJ0C+BXGBlBIx48fV0JCgv71r3+pRo0apnMAAMWoZs2aeuqpp5SQkKDs7GzTOYDfYGwAhTRt2jT9+uuvio6ONp0CADDA4XBo165dmjZtmukUwG8wNoBCyM/Pl8vl0v33368mTZqYzgEAGNCkSRPdd999crlcys/PN50D+AXGBlAIH3/8sdavXy+n02k6BQBgkNPp1M8//6xPPvnEdArgFxgbwAW43W5ZlqVbbrlFN954o+kcAIBBN910k26++WZZliW32206B/B5jA3gAr755ht9++23HNUAAEgqOLqxdOlSLVq0yHQK4PMYG8AFWJalpk2bqlOnTqZTAAA+oFOnTrrmmmtkWZbpFMDnMTaA81izZo1SU1PlcDhks9lM5wAAfEBISIgcDoc+/fRTrV271nQO4NMYG8B5uFwu1apVS0888YTpFACAD3niiSdUs2ZNuVwu0ymAT2NsAOfwyy+/aPr06Ro6dKhKlChhOgcA4EPCwsI0dOhQTZ8+Xdu3bzedA/gsxgZwDgkJCSpfvrx69OhhOgUA4IN69uypcuXKKSEhwXQK4LMYG8BZ7N+/XxMnTlT//v0VHh5uOgcA4IPCw8P17LPPauLEiTpw4IDpHMAnMTaAsxgzZozcbrcGDBhgOgUA4MMGDBigvLw8jRkzxnQK4JMYG8DfHD16VKNGjVL37t112WWXmc4BAPiwyy+/XN27d1dycrKOHj1qOgfwOYwN4G8mT56sgwcPKjIy0nQKAMAPREZG6sCBA3rzzTdNpwA+h7EBnCI3N1dxcXF67LHHVLduXdM5AAA/UK9ePT322GOKjY1Vbm6u6RzApzA2gFO8//772rZtmxwOh+kUAIAfcTgc2rZtmz744APTKYBPYWwAJ7jdbrlcLt11111q0aKF6RwAgB+57rrrdOedd8qyLLndbtM5gM9gbAAnfP755/rxxx/ldDpNpwAA/JDT6dSPP/6oL774wnQK4DMYG8AJlmWpdevWuv32202nAAD8ULt27dSqVStZlmU6BfAZjA1A0rJly/Tll1/K4XDIZrOZzgEA+CGbzSaHw6G0tDQtX77cdA7gExgbgAqOajRo0EAPPvig6RQAgB976KGHVL9+fY5uACcwNhD01q9fr48++khRUVEKDQ01nQMA8GOhoaGKiorSrFmztGHDBtM5gHGMDQS92NhYXX755fr3v/9tOgUAEACefvppXX755YqNjTWdAhjH2EBQ++233/T2229r8ODBKlWqlOkcAEAAKFWqlAYNGqQpU6Zo9+7dpnMAoxgbCGpJSUkqWbKk+vTpYzoFABBA+vbtq5IlSyopKcl0CmAUYwNB69ChQxo3bpz69OmjihUrms4BAASQihUrqnfv3ho3bpwyMjJM5wDGMDYQtCZMmKCsrCwNHjzYdAoAIAANHjxYR48e1YQJE0ynAMYwNhCUjh8/rsTERHXt2lXVq1c3nQMACEA1atRQ165dlZCQoOPHj5vOAYxgbCAoTZ06Vbt371Z0dLTpFABAAIuOjtbu3bv1zjvvmE4BjGBsIOjk5eUpJiZGDzzwgBo1amQ6BwAQwBo3bqz7779fMTExys/PN50DFDvGBoLOnDlztGHDBjmdTtMpAIAg4HQ6tX79es2ZM8d0ClDsGBsIKm63W5Zl6dZbb9X1119vOgcAEARuuOEG3XLLLbIsS26323QOUKwYGwgqX331lZYtW8ZRDQBAsXI6nfruu+/09ddfm04BihVjA0HFsiw1a9ZMHTt2NJ0CAAginTp1UtOmTWVZlukUoFgxNhA0fvzxR3322WdyOByy2WymcwAAQcRms8nhcGjevHlavXq16Ryg2DA2EDRcLpdq166txx9/3HQKACAIPfHEE6pdu7ZcLpfpFKDYMDYQFLZt26b33ntPkZGRKlGihOkcAEAQKlGihIYOHaoZM2bol19+MZ0DFAvGBoJCfHy8KlasqGeeecZ0CgAgiPXo0UMVKlRQfHy86RSgWDA2EPB+//13paSkqH///ipbtqzpHABAECtbtqz69++vlJQU7d+/33QO4HWMDQS80aNHS5L69+9vuAQAAGnAgAFyu91//vkEBDLGBgLakSNHNGrUKPXo0UNVq1Y1nQMAgKpWrapnnnlGo0aN0pEjR0znAF7F2EBAmzRpkg4dOqShQ4eaTgEA4E+RkZH6448/NHnyZNMpgFcxNhCwcnJyFBcXpyeeeEJ16tQxnQMAwJ/q1Kmjxx9/XHFxccrJyTGdA3gNYwMB67333tP27dsVHR1tOgUAgDNER0frl19+0fvvv286BfAaxgYCktvtlsvl0t13361rr73WdA4AAGdo0aKF7rrrLrlcLrndbtM5gFcwNhCQ5s2bpzVr1sjpdJpOAQDgnJxOp1avXq3PPvvMdArgFYwNBCTLstSmTRvddtttplMAADin22+/Xa1bt5ZlWaZTAK9gbCDgfPvtt/r666/ldDpls9lM5wAAcE42m01Op1NfffWVvvvuO9M5gMcxNhBwLMtSw4YNdf/995tOAQDggh544AE1aNCAoxsISIwNBJSff/5Zc+bMUXR0tEJDQ03nAABwQaGhoYqOjtbs2bO1fv160zmARzE2EFBiY2NVrVo1de3a1XQKAACF1rVrV11xxRWKjY01nQJ4FGMDAePXX3/V1KlTNXjwYJUsWdJ0DgAAhVaqVCkNHjxYb7/9tn777TfTOYDHMDYQMBITE1WqVCn17t3bdAoAAEXWp08flSpVSomJiaZTAI9hbCAg/PHHHxo/frz69u2rChUqmM4BAKDIKlSooD59+mj8+PE6dOiQ6RzAIxgbCAjjx4/X8ePHNWjQINMpAABctEGDBikrK0vjx483nQJ4BGMDfi8rK0uJiYn697//rSuvvNJ0DgAAF6169erq2rWrEhMTlZWVZToHuGSMDfi9t99+W3v37lV0dLTpFAAALll0dLT27NmjqVOnmk4BLhljA34tLy9PMTExevDBB9WwYUPTOQAAXLJGjRrpgQceUExMjPLy8kznAJeEsQG/9tFHH2nTpk1yOp2mUwAA8Bin06mNGzdq9uzZplOAS8LYgN9yu92yLEu333672rRpYzoHAACPuf7663XbbbfJsiy53W7TOcBFY2zAb6WlpWnFihUc1QAABCSn06nly5fryy+/NJ0CXDTGBvyWZVm69tprddddd5lOAQDA4+6++241b95clmWZTgEuGmMDfumHH37QF198IYfDIZvNZjoH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",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Timesteps: {'W': 0, 'X': 0, 'Y': 0, 'Z': 0, 'WX': 1, 'YZ': 1, 'O': 2}\n"
     ]
    }
   ],
   "source": [
    "equality_model.print_structure()\n",
    "print(\"Timesteps:\", equality_model.timesteps)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The algorithm with no intervention\n",
    "\n",
    "Let's first observe the behavior of the algorithm when we provide an input of the form `BBCD` with no interventions. Here is a visual depiction:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "No intervention:\n",
      " defaultdict(None, {'W': array([ 0.28, -0.95]), 'X': array([ 0.28, -0.95]), 'Y': array([-0.45, -0.55]), 'Z': array([ 0.78, -0.83]), 'WX': True, 'YZ': False, 'O': False}) \n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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TsDY8EBz587Vzp07FRISYjoFAADghqxWq3bs2KF58+aZToETMDY8jMPhkM1m06OPPqp69eqZzgEAALihevXq6ZFHHpHNZpPD4TCdg0zG2PAwP/30k9atWyer1Wo6BQAAIEOsVqvWrl2rZcuWmU5BJmNseBibzaYaNWroqaeeMp0CAACQIc2aNVP16tVls9lMpyCTMTY8yG+//aZFixYpJCREFovFdA4AAECGWCwWhYSEaOHChdq0aZPpHGQixoYHsdvtuueee9S6dWvTKQAAALekdevWKlWqlOx2u+kUZCLGhofYu3evvvjiC/Xv319+fn6mcwAAAG5JtmzZ1L9/f82YMUN79+41nYNMwtjwEOHh4cqXL586dOhgOgUAAOC2vPXWW8qXL58iIiJMpyCTMDY8wPHjxzVx4kT17NlTuXLlMp0DAABwW3LlyqUePXpowoQJOnHihOkcZALGhgeIjY2VxWJRjx49TKcAAADckX++nomNjTVcgszA2HBz58+fV2xsrDp27KiCBQuazgEAALgjhQoVUseOHTVixAidP3/edA7uEGPDzU2YMEFnzpxRv379TKcAAABkin79+unMmTOaOHGi6RTcIcaGG0tOTlZERITatGmje+65x3QOAABApihdurReeeUVhYeHKzk52XQO7gBjw4198cUX2rdvn0JCQkynAAAAZKqQkBDt27dPM2fONJ2CO8DYcFMOh0N2u13NmjVT9erVTecAAABkqho1auipp56S3W6Xw+EwnYPbxNhwUwsXLtTmzZtltVpNpwAAADiF1WrVpk2btGjRItMpuE2MDTdls9lUr149PfLII6ZTAAAAnOLRRx9V3bp1ZbPZTKfgNjE23NDPP/+sZcuWyWq1ymKxmM4BAABwCovFIqvVqp9++klr1qwxnYPbwNhwQzabTRUrVtRzzz1nOgUAAMCpnnvuOVWoUIGjG26KseFmtm3bpnnz5ik4OFg+PvzPBwAAPJuvr6+Cg4M1d+5cbd++3XQObhFfrbqZ0NBQFS1aVK+//rrpFAAAgCzRtm1bFSlSRKGhoaZTcIsYG27k4MGDmjJlivr06aPs2bObzgEAAMgS2bNnV58+fTRlyhQdOnTIdA5uAWPDjURFRSkgIEBdunQxnQIAAJClunTpohw5cigqKsp0Cm4BY8NN/PXXXxo7dqy6deumPHnymM4BAADIUnnz5lW3bt00ZswY/fXXX6ZzkEGMDTcxevRoJSUlqXfv3qZTAAAAjOjdu7cuXbqkMWPGmE5BBjE23EBiYqKio6PVrl07FSlSxHQOAACAEUWLFlW7du0UHR2txMRE0znIAMaGG/jss8907NgxBQUFmU4BAAAwKigoSEePHtWUKVNMpyADGBsuLjU1VaGhoXr++edVvnx50zkAAABGVahQQa1atVJoaKhSU1NN5+AmGBsu7quvvtKuXbtktVpNpwAAALgEq9WqnTt3au7cuaZTcBOMDRfmcDhks9nUuHFj1alTx3QOAACAS6hbt64aNWokm80mh8NhOgc3wNhwYXFxcVq/fj1HNQAAAP7DarVq3bp1+vHHH02n4AYYGy7MZrOpZs2aeuKJJ0ynAAAAuJQnn3xS9913n2w2m+kU3ABjw0X98ssvWrx4sUJCQmSxWEznAAAAuBSLxaKQkBB99913+vXXX03n4DoYGy7KbrerTJkyeumll0ynAAAAuKSXX35ZpUuXlt1uN52C62BsuKA//vhDM2fOVP/+/eXn52c6BwDgZc4nn5elqEV/pvypX4/8qoSkBNNJwDX5+fmpf//++uKLL7Rnzx7TObgGxoYLCg8PV4ECBdS+fXvTKQAALxF/PF69FvZSuZhyKhhWUI4uDg3aP0i1xtZSnv/lUbmYcuq1sJfij8ebTgWu0KFDBxUoUEDh4eGmU3ANjA0Xc+zYMU2aNEm9evVSQECA6RwAgIfbc3qPnpjyhKqOqqrR60Zr9+ndcujKtxJ1yKHdp3dr9LrRqjqqqp6Y8oT2nOa7yHANAQEB6tmzpyZNmqTjx4+bzsF/MDZczIgRI+Tr66u3337bdAoAwMNN2DhBVUZVUdzeOElSiiPlho//5/64vXGqMqqKJmyc4PRGICPefvttWSwWjRgxwnQK/oOx4UISEhI0cuRIderUSQUKFDCdAwBwkkaNGslischisahFixZGGoYtG6ZO33RSYkqiUtJuPDL+KyUtRYkpier0TScNWzbMSYXO1adPn/T/DQIDA03n4A4VLFhQnTp1UmxsrBISuMbIlTA2XMiECRN07tw59e3b13QKAOA/mjVrpvz58+vo0aNX3XfmzBkVLVpU9erVU1paWoaer1KlSpoyZYqCgoIy3DBx4kRVrlxZOXLkUPny5W/7u7it3m6l9x59Txp5jTs/kfTBNX5NufZzvRf3niZunHjTz5mWlpb+Tos5cuRQjRo1NH369Az1fvrpp+nD4L+/jhw5csVjS5cufc3Hde3a9YrHtW3bVlOmTNHDDz+coQa4vn79+uns2bOaOPHm/z4i6/BWRy4iOTlZERERatOmjUqVKmU6BwDwH6NGjVK1atXUt29fff7551fc9+677+rEiRNatGiRfHwy9n28woUL6/XXX8/w5x87dqy6du2qF154Qf369dPy5cvVq1cvXbhwQVarNcPPs2rLKs0dP1fKdoMH5ZH02H9uy339h/dY2ENNyjRRmfxlrvuYgQMH6uOPP1anTp1Up04dzZs3T6+++qosFoteeeWVDLUPHTpUZcpc+Tny5ct31eNq1qyp/v37X3FbhQoVrvj9Aw88oAceeEA//PCDNm7cmKHPD9dWqlQptWnTRhEREerevbuyZbvRv+TIKowNFzF9+nTt379fISEhplMAANdQpkwZDR48WFarVW+++aaeeOIJSdK6des0ZswYBQUF6b777nPK57548aIGDhyop59+WrNmzZIkderUSWlpafrwww/VuXNn5c+fP0PP9XzH52UpYZEjzSFduM6Dsku6hT9KSlqKunzbRYvbLr7m/QcPHlR4eLjefvttxcbGSpI6duyoRx99VMHBwXrppZfk6+t708/TrFkz1a5d+6aPK168+C0NOXiOkJAQTZ06VTNmzFDbtm1N50CcRuUS/jm0/PTTT6tatWqmcwAA19GvXz/VqFFD3bt3V2JiolJTU9W1a1fdc889evfdd7Vt2zYdPnw40z9vXFycTp48qe7du19x+9tvv63z589r/vz5GXqez77+TEfXHpXjKcfNH5wq6VLG+lLSUvT9H9/r9+O/X/P+efPmKTk5+Yp+i8Wibt266cCBA1q9enXGPpGkc+fOKTU19aaPS0pK0vnz5zP8vPAM1atXV/PmzWW32+VwZODfczgdY8MFLFiwQFu3br2lw+AAgKzn5+encePGac+ePfrwww8VGxurjRs3avTo0Tp9+rQqV66sAQMGZPrn/eWXXyTpqu/qP/DAA/Lx8Um//0ZSU1PVr08/WR6wSIVv8uCTkoZL+p+kUElLdXl83ICfj59Grx993f5cuXKpcuXKV9xet27d9PszonHjxsqTJ48CAgL07LPPaufOndd83NKlSxUQEKDAwECVLl1a0dHRGXp+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XO75UJ9Q4sLilM2KiIiI3IHUBix/mrNRjLjEOCIPRLLtxDZOJp3EyLNduAkTjWo2oodfD0a3HX1HrjggIiIiIvbUBiycJog7yNWMq5xIOkF6VjpuZjf8avqVeGdwEREREbkzqQ1o61ZyA8ftknIXquJahVb3t6roMERERETkNlIbsPQ0Z0NERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIc0kqGYYBQEpKikODERERERGR37bcnCA3RyhKiZKN1NRUABo0aFCGsERERERE5G6RmppK9erVi6xjMkqQkuTk5HD+/HmqVq2KyWQqtwBFREREROTOYhgGqamp1K1bFyenomdllCjZEBERERERuVWaIC4iIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhD/D+cTS+SSHjpOQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "setting = equality_model.run_forward(\n",
    "    {\"W\": reps[0], \"X\": reps[0], \"Y\": reps[1], \"Z\": reps[3]}\n",
    ")\n",
    "print(\"No intervention:\\n\", setting, \"\\n\")\n",
    "equality_model.print_setting(setting)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The algorithm with an intervention\n",
    "\n",
    "Let's now see the behavior of the algorithm when we provide the input with an intervention setting **WX** to **False**. First, a visual depiction:\n",
    "\n",
    "And then the same computation with `compute_A`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Intervention setting WX to FALSE:\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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3bRpUzVt2jQTSgG4M8YG4AZmz54ti8Wir7766ob7HnjgAVksFsXFxd1wX9myZdWoUSNJ0s6dO+Xv76+OHTve8Lg///xTJUqUUMOGDZWampp2+8QtE/Ve3Hu3D4yT9MFNfm289pD34t7TpC2Tbv9cgBdr2bKlChQooBMnTtxw3/nz59Nep2XLlpXFYrnlr7feeuumn+eWr+1I3fz1nHTjw3ltA7gV3o0KcANNmjSRJK1atUpt27ZNu/3ChQvavn27/Pz8tHr16uveUebw4cM6fPiwXnvtNUlS9erVFRwcrBEjRuitt97S448/nvbYd999V6dOndLSpUvl43PtexAHzh1Q76W97yz0GUn+/7qt9P//215Le+mJ8k9wnjdwE6NHj1bNmjXVv39/ffbZZ9fd97///U+nT5/W119/rQMHDig+Pj7d54iNjdX69ev18MMPp3t/hl7bxSU9ks7tvuk/nNc2gJthbABuoGTJkipfvrxWrVp13e1r166Vw+HQyy+/fMN9f//z30NFkgYPHqzPP/9c3bp109atW+Xv76+1a9dq/Pjx6t+/v+rUqZP22G6Lut3xqRWqLukW73CbnJqsbou66dv2397Z8wJeonz58nr//fdltVr11ltv6amnnpIkbdy4UWPHjlVQUJAeeOABPfDAA+l+/LfffqsNGzboueeeU/fu3dN9TIZe23kkpf8p0sVrG8DNcBoV4CaaNGmin376SVeuXEm7bfXq1apRo4ZatmypdevWXXcK1OrVq2WxWNS4ceO023LkyKExY8Zo9+7d+r//+z8lJSWpa9euKlOmjIYNG5b2uJ2ndmrZ3mVKPpEsXcyE+OOSvpKSI5K1rOMyFS5aWJ06ddKZM2du+6GbNm1SixYtVLhwYeXMmVPly5dXp06drntMamqqoqKiVKNGDeXIkUPFihVTt27ddO7cuUyIB7LWgAEDVLt2bfXo0UMJCQlKSUlR9+7ddd999+n999+/6ccdP35c7du3V6lSpfTJJ59cd9/p06e1a9cubf59s5b9tuzOv5HwTz9JmiLJLulDSbFS8vpkLfttmX499estP3TkyJGqUaOGcuXKpQIFCqhevXo3HME5evSoOnXqpGLFiil79uyqUaOGJk+efPe9AIziyAbgJpo0aaJp06Zp/fr1aRddrl69Wo0aNVKjRo10/vx5bd++XbVr1067r2rV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HA7TOQDuEWMDcHNLly7V9u3bZbVaTacAQKawWq3atm2bvv76a9MpAO4RYwNwczabTQ8//LAeffRR0ykAkCkee+wxNWzYUDabzXQKgHvE2ADc2Lp16/Tjjz/KarXKYrGYzgGATGGxWGS1WvXDDz9o/fr1pnMA3APGBuDGbDabqlSpoueee850CgBkqueff16VK1fm6Abg5hgbgJvatWuX5s+fr+DgYPn48FIG4Fl8fHwUHBysefPmaffu3aZzANwlvkIB3FRoaKhKlCihN99803QKADhF+/btVbx4cYWGhppOAXCXGBuAGzp69KimTZumfv36KXv27KZzAMApsmfPrn79+mnatGn6448/TOcAuAuMDcANRUVFKVeuXOrWrZvpFABwqm7duilHjhyKiooynQLgLjA2ADfz559/aty4cXrnnXeUN29e0zkA4FT58uXTO++8o7Fjx+rPP/80nQPgDjE2ADczZswYJSYmqm/fvqZTACBL9O3bV1evXtXYsWNNpwC4Q4wNwI0kJCQoOjpaHTp0UPHixU3nAECWKFGihDp06KCoqCglJCSYzgFwBxgbgBuZOnWqTp48qaCgINMpAJClgoKCdPLkSX366aemUwDcAcYG4CZSUlIUFhamF198UZUqVTKdAwBZqnLlynrhhRcUFhamlJQU0zkAMoixAbiJr776Svv27ZPVajWdAgBGWK1W7d27V/PmzTOdAiCDGBuAG3A4HLLZbHriiSdUr1490zkAYET9+vXVrFkz2Ww2ORwO0zkAMoCxAbiBuLg4bdq0iaMaALye1WrVxo0b9f3335tOAZABjA3ADdhsNtWpU0fNmzc3nQIARj311FN64IEHZLPZTKcAyADGBuDifvrpJ3377bcKCQmRxWIxnQMARlksFoWEhOibb77Rzz//bDoHwG0wNgAXZ7fbVb58eb388sumUwDAJbzyyisqV66c7Ha76RQAt8HYAFzYb7/9ptmzZyswMFB+fn6mcwDAJfj5+SkwMFCff/65Dhw4YDoHwC0wNgAXFh4eroIFC6pjx46mUwDApXTq1EkFCxZUeHi46RQAt8DYAFzUyZMnNXnyZPXp00e5cuUynQMALiVXrlzq3bu3Jk+erFOnTpnOAXATjA3ARY0cOVK+vr7q2bOn6RQAcEk9e/aUxWLRyJEjTacAuAnGBuCC4uPjNWrUKHXp0kUFCxY0nQMALqlQoULq0qWLYmNjFR8fbzoHQDoYG4ALmjBhgi5evKgBAwaYTgEAlzZgwABdvHhREydONJ0CIB2MDcDFJCUlKSIiQq+//rrKlCljOgcAXFrZsmXVrl07RUREKCkpyXQOgH9hbAAuZubMmTpy5IhCQkJMpwCAWwgJCdHhw4c1a9Ys0ykA/oWxAbiQ1NRU2e12tW7dWjVq1DCdAwBuoWbNmnrmmWdkt9vlcDhM5wD4B8YG4EKWLFmiHTt2yGq1mk4BALditVq1fft2LVmyxHQKgH9gbAAuxGaz6ZFHHlHjxo1NpwCAW2nSpIkefvhh2Ww20ykA/oGxAbiINWvWaNWqVbJarbJYLKZzAMCtWCwWWa1WrVy5UmvXrjWdA+AvjA3ARdhsNlWrVk3PPvus6RQAcEvPPfecqlatytENwIUwNgAXsHPnTi1YsEDBwcHy8eFlCQB3w8fHR8HBwZo/f75+/fVX0zkAxNgAXEJoaKhKlSqlN954w3QKALi1N954QyVLllRoaKjpFABibADGHTlyRDNmzFD//v3l7+9vOgcA3Fr27NnVv39/TZ8+XUeOHDGdA3g9xgZgWGRkpHLnzq2uXbuaTgEAj9C1a1flypVLUVFRplMAr8fYAAw6d+6cxo8frx49eihPnjymcwDAI+TNm1c9evTQuHHjdO7cOdM5gFdjbAAGjR49WklJSerTp4/pFADwKH379lVSUpLGjBljOgXwaowNwJArV64oOjpaHTt2VLFixUznAIBHKVasmN566y1FR0frypUrpnMAr8XYAAyZOnWqzpw5o6CgINMpAOCRgoKCdPr0aX366aemUwCvxdgADEhJSVFYWJheeukl3X///aZzAMAjVaxYUS+++KLCwsKUkpJiOgfwSowNwIA5c+Zo//79CgkJMZ0CAB4tJCRE+/bt09y5c02nAF6JsQFkMYfDIZvNpv/85z+qW7eu6RwA8Gj16tXTE088IZvNJofDYToH8DqMDSCLLV++XFu2bJHVajWdAgBewWq1avPmzVqxYoXpFMDrMDaALGaz2fTggw/qySefNJ0CAF6hefPmevDBB2Wz2UynAF6HsQFkoc2bN+u7776T1WqVxWIxnQMAXsFisSgkJETLli3Tli1bTOcAXoWxAWQhu92uChUq6MUXXzSdAgBe5aWXXlL58uVlt9tNpwBehbEBZJH9+/fryy+/VFBQkPz8/EznAIBX8fPzU1BQkL744gvt37/fdA7gNRgbQBYJCwtT4cKF9dZbb5lOAQCv1LFjRxUqVEjh4eGmUwCvwdgAssCJEyf0ySefqE+fPsqZM6fpHADwSjlz5lSfPn30ySef6OTJk6ZzAK/A2ACyQExMjLJly6YePXqYTgEAr9ajRw/5+voqJibGdArgFRgbgJNdvHhRo0ePVteuXVWgQAHTOQDg1QoWLKiuXbtq1KhRunjxoukcwOMxNgAnmzBhguLj49W/f3/TKQAASf3791d8fLwmTpxoOgXweIwNwIkSExMVERGhN954Q6VLlzadAwCQVKZMGb3++uuKiIhQYmKi6RzAozE2ACf67LPPdPToUYWEhJhOAQD8Q0hIiI4cOaKZM2eaTgE8GmMDcJLU1FTZ7XY9++yzql69uukcAMA/1KhRQ61bt5bdbldqaqrpHMBjMTYAJ1m0aJF+/fVXWa1W0ykAgHRYrVbt3LlTixcvNp0CeCzGBuAkNptNjRs3VuPGjU2nAADS0aRJEzVq1Eg2m810CuCxGBuAE6xatUpr1qzhqAYAuDir1arVq1dr9erVplMAj8TYAJzAZrOpevXqeuaZZ0ynAABuoXXr1qpevTpHNwAnYWwAmWz79u1atGiRQkJC5OPDSwwAXJmPj4+Cg4O1cOFC7dixw3QO4HH4SgjIZKGhoSpdurTatWtnOgUAkAGvv/66SpcurdDQUNMpgMdhbACZ6NChQ/rss880YMAA+fv7m84BAGSAv7+/+vfvrxkzZujw4cOmcwCPwtgAMlFkZKTy5MmjLl26mE4BANyBLl26KCAgQJGRkaZTAI/C2AAyydmzZzVhwgT17NlTAQEBpnMAAHcgT5486tmzp8aPH6+zZ8+azgE8BmMDyCSjR49WSkqKevfubToFAHAXevfureTkZI0ZM8Z0CuAxGBtAJrhy5YpiYmLUsWNHFS1a1HQOAOAuFCtWTB07dlR0dLSuXLliOgfwCIwNIBN88sknOnPmjIKCgkynAADuQVBQkM6cOaMpU6aYTgE8AmMDuEfJyckKCwvTyy+/rAoVKpjOAQDcg/vvv18vvfSSwsLClJycbDoHcHuMDeAeffnllzpw4ICsVqvpFABAJrBarfrtt980Z84c0ymA22NsAPfA4XDIZrOpefPmevDBB03nAAAywUMPPaQnn3xSNptNDofDdA7g1hgbwD1YtmyZfv75Z45qAICHsVqt+umnn/Tdd9+ZTgHcGmMDuAc2m01169bVE088YToFAJCJ/vOf/+ihhx6SzWYznQK4NcYGcJc2bdqkFStWyGq1ymKxmM4BAGQii8Uiq9Wq5cuXa/PmzaZzALfF2ADuks1mU8WKFfXCCy+YTgEAOMGLL76o+++/n6MbwD1gbAB3Ye/evZozZ46CgoLk6+trOgcA4AS+vr4KCgrSnDlztG/fPtM5gFtibAB3ISwsTEWKFFGHDh1MpwAAnKhDhw4qXLiwwsLCTKcAbomxAdyh48ePa+rUqerbt69y5MhhOgcA4EQ5c+ZUnz59NGXKFB0/ftx0DuB2GBvAHYqJiVG2bNn0zjvvmE4BAGSBHj16KFu2bBo5cqTpFMDtMDaAO3DhwgWNHj1a3bp1U4ECBUznAACyQIECBdS1a1eNHj1aFy9eNJ0DuBXGBnAHxo8fr8uXL6t///6mUwAAWah///66dOmSxo8fbzoFcCuMDSCDrl69qsjISL355psqVaqU6RwAQBYqXbq03njjDUVGRioxMdF0DuA2GBtABs2YMUN//PGHgoODTacAAAwICQnR0aNHNWPGDNMpgNtgbAAZkJqaKrvdrueff17VqlUznQMAMKBatWp67rnnZLfblZqaajoHcAuMDSADFixYoN27d8tqtZpOAQAYZLVatWvXLi1cuNB0CuAWGBvAbTgcDtlsNj366KN65JFHTOcAAAxq1KiRmjRpIpvNJofDYToHcHmMDeA2Vq5cqXXr1nFUAwAg6drRjbVr12rVqlWmUwCXx9gAbsNms6lmzZpq1aqV6RQAgAto1aqVatSoIZvNZjoFcHmMDeAWtm3bpiVLligkJEQWi8V0DgDABfj4+CgkJESLFy/W9u3bTecALo2xAdyC3W5XmTJl9Nprr5lOAQC4kNdee02lS5eW3W43nQK4NMYGcBO///67Zs6cqQEDBihbtmymcwAALsTf318DBgzQzJkzdejQIdM5gMtibAA3ERkZqbx586pz586mUwAALqhLly7KkyePIiMjTacALouxAaTjzJkzmjBhgnr16qWAgADTOQAAFxQQEKCePXtqwoQJOnv2rOkcwCUxNoB0jBo1Sg6HQ7179zadAgBwYb1791ZKSopGjRplOgVwSYwN4F8uX76skSNHqlOnTipSpIjpHACACytatKg6deqkmJgYXb582XQO4HIYG8C/TJ48WefOnVNgYKDpFACAGwgMDNTZs2f1ySefmE4BXA5jA/iH5ORkhYeH65VXXlH58uVN5wAA3ECFChX0yiuvKCwsTMnJyaZzAJfC2AD+Yfbs2Tp48KBCQkJMpwAA3EhISIgOHjyoL774wnQK4FIYG8BfHA6H7Ha7WrRooTp16pjOAQC4kQcffFBPPfWUbDabHA6H6RzAZTA2gL988803+uWXX2S1Wk2nAADckNVq1S+//KJvv/3WdArgMhgbwF9sNpvq16+vpk2bmk4BALihZs2aqV69erLZbKZTAJfB2AAkbdiwQd9//71CQkJksVhM5wAA3JDFYlFISIji4uK0ceNG0zmAS2BsALp2VKNSpUpq27at6RQAgBt74YUXVLFiRY5uAH9hbMDr7d69W1999ZWCgoLk6+trOgcA4MZ8fX0VFBSkuXPnas+ePaZzAOMYG/B6YWFhKlq0qP773/+aTgEAeIAOHTqoaNGiCgsLM50CGMfYgFc7duyYPv30U/Xr1085cuQwnQMA8AA5cuRQ3759NXXqVB0/ftx0DmAUYwNeLTo6WtmzZ1f37t1NpwAAPMg777yj7NmzKzo62nQKYBRjA17r/PnzGjNmjLp37678+fObzgEAeJD8+fOrW7duGjNmjC5cuGA6BzCGsQGvNW7cOCUkJKhfv36mUwAAHqhfv366fPmyxo0bZzoFMIaxAa909epVRUVFqX379ipZsqTpHACABypVqpTat2+vyMhIXb161XQOYARjA15p2rRpOn78uIKDg02nAAA8WHBwsI4fP67p06ebTgGMYGzA66SkpCg0NFRt2rRRlSpVTOcAADxY1apV9fzzzys0NFSpqammc4Asx9iA15k/f7727Nkjq9VqOgUA4AWsVqt2796t+fPnm04BshxjA17F4XDIZrPpscceU8OGDU3nAAC8wMMPP6xHH31UNptNDofDdA6QpRgb8Co//PCDNmzYwFENAECWslqtWr9+vX788UfTKUCWYmzAq9hsNtWqVUstW7Y0nQIA8CKtWrVSzZo1ZbPZTKcAWYqxAa/xyy+/6Ouvv1ZISIgsFovpHACAF7FYLAoJCdHSpUu1detW0zlAlmFswGvY7XaVLVtWr776qukUAIAXeu2111S2bFnZ7XbTKUCWYWzA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iAg8PT2ZP39+TYciIiIiN4GHH34YT0/PUnfQriy1Ae1NmzYNT09P1q5dWyX3+933bGRkZFg3DgRo166d3e7aVeHkpZP4L/YnIyejyu7pbnYnPjQeHw+fKrtnTTh9+jSHDx+2ft+zZ09cXFxqMCIRERG5EV26dIkDBw5Yv+/evTv16tVz6DPVBrR15MgRfvnFspav2Wwucm51eXKD332yUZ0iYyMZs2VM1d3voUhGdRpVZfcTERERkaqnNmD53JDDqKrD6E6jmRU8q0ruNfuB2Tf0h0xERETkRqE2oOMo2Shk2v3TePehd3E3u5d7/J7ZyYy72Z3IhyJ5KeglB0UoIiIiIlVNbUDHULJRhNGdRhMfGk+wdzBAqR+4/PPB3sHEh8YrmxURERG5DqkNWPU0Z6MU8UnxRMREsO3YNo4nH8cosF24CRMtGrSgn28/xncZf12uOCAiIiIi9tQGLJ4miDvI5azLHEs+RmZOJm5mN3wb+JZ5Z3ARERERuT6pDWirPLmB43ZJuQHVda1Lh9s71HQYIiIiIlKN1AasOM3ZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHMJclkqGYQCQmprq0GBEREREROT3LT8nyM8RSlKmZCMtLQ2AZs2aVSIsERERERG5UaSlpXHrrbeWWMdklCElycvL4+zZs9SrVw+TyVRlAYqIiIiIyPXFMAzS0tJo0qQJTk4lz8ooU7IhIiIiIiJSXpogLiIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEP8P5oQZwn4Ill+AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\n",
    "    \"Intervention setting WX to FALSE:\\n\",\n",
    ")\n",
    "equality_model.print_setting(\n",
    "    equality_model.run_forward(\n",
    "        {\"W\": reps[0], \"X\": reps[0], \"Y\": reps[1], \"Z\": reps[3], \"WX\": False}\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that, in this example, even though the left two inputs are the same, the intervention has changed the intermediate prediction for those two inputs from **True** to **False**, and thus the algorithm outputs **True**, since **WX** and **YZ** are both **False**."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The algorithm with an interchange intervention\n",
    "\n",
    "Finally, let's observe the behavior of the algorithm when we provide the base input `BBCD` with an intervention setting **WX** to be the value it would be for the source input `ABCC`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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3bRpUzVt2jQTSgG4M8YG4AZmz54ti8Wir7766ob7HnjgAVksFsXFxd1wX9myZdWoUSNJ0s6dO+Xv76+OHTve8Lg///xTJUqUUMOGDZWampp2+8QtE/Ve3Hu3D4yT9MFNfm289pD34t7TpC2Tbv9cgBdr2bKlChQooBMnTtxw3/nz59Nep2XLlpXFYrnlr7feeuumn+eWr+1I3fz1nHTjw3ltA7gV3o0KcANNmjSRJK1atUpt27ZNu/3ChQvavn27/Pz8tHr16uveUebw4cM6fPiwXnvtNUlS9erVFRwcrBEjRuitt97S448/nvbYd999V6dOndLSpUvl43PtexAHzh1Q76W97yz0GUn+/7qt9P//215Le+mJ8k9wnjdwE6NHj1bNmjXVv39/ffbZZ9fd97///U+nT5/W119/rQMHDig+Pj7d54iNjdX69ev18MMPp3t/hl7bxSU9ks7tvuk/nNc2gJthbABuoGTJkipfvrxWrVp13e1r166Vw+HQyy+/fMN9f//z30NFkgYPHqzPP/9c3bp109atW+Xv76+1a9dq/Pjx6t+/v+rUqZP22G6Lut3xqRWqLukW73CbnJqsbou66dv2397Z8wJeonz58nr//fdltVr11ltv6amnnpIkbdy4UWPHjlVQUJAeeOABPfDAA+l+/LfffqsNGzboueeeU/fu3dN9TIZe23kkpf8p0sVrG8DNcBoV4CaaNGmin376SVeuXEm7bfXq1apRo4ZatmypdevWXXcK1OrVq2WxWNS4ceO023LkyKExY8Zo9+7d+r//+z8lJSWpa9euKlOmjIYNG5b2uJ2ndmrZ3mVKPpEsXcyE+OOSvpKSI5K1rOMyFS5aWJ06ddKZM2du+6GbNm1SixYtVLhwYeXMmVPly5dXp06drntMamqqoqKiVKNGDeXIkUPFihVTt27ddO7cuUyIB7LWgAEDVLt2bfXo0UMJCQlKSUlR9+7ddd999+n999+/6ccdP35c7du3V6lSpfTJJ59cd9/p06e1a9cubf59s5b9tuzOv5HwTz9JmiLJLulDSbFS8vpkLfttmX499estP3TkyJGqUaOGcuXKpQIFCqhevXo3HME5evSoOnXqpGLFiil79uyqUaOGJk+efPe9AIziyAbgJpo0aaJp06Zp/fr1aRddrl69Wo0aNVKjRo10/vx5bd++XbVr1067r2rV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HA7TOQDuEWMDcHNLly7V9u3bZbVaTacAQKawWq3atm2bvv76a9MpAO4RYwNwczabTQ8//LAeffRR0ykAkCkee+wxNWzYUDabzXQKgHvE2ADc2Lp16/Tjjz/KarXKYrGYzgGATGGxWGS1WvXDDz9o/fr1pnMA3APGBuDGbDabqlSpoueee850CgBkqueff16VK1fm6Abg5hgbgJvatWuX5s+fr+DgYPn48FIG4Fl8fHwUHBysefPmaffu3aZzANwlvkIB3FRoaKhKlCihN99803QKADhF+/btVbx4cYWGhppOAXCXGBuAGzp69KimTZumfv36KXv27KZzAMApsmfPrn79+mnatGn6448/TOcAuAuMDcANRUVFKVeuXOrWrZvpFABwqm7duilHjhyKiooynQLgLjA2ADfz559/aty4cXrnnXeUN29e0zkA4FT58uXTO++8o7Fjx+rPP/80nQPgDjE2ADczZswYJSYmqm/fvqZTACBL9O3bV1evXtXYsWNNpwC4Q4wNwI0kJCQoOjpaHTp0UPHixU3nAECWKFGihDp06KCoqCglJCSYzgFwBxgbgBuZOnWqTp48qaCgINMpAJClgoKCdPLkSX366aemUwDcAcYG4CZSUlIUFhamF198UZUqVTKdAwBZqnLlynrhhRcUFhamlJQU0zkAMoixAbiJr776Svv27ZPVajWdAgBGWK1W7d27V/PmzTOdAiCDGBuAG3A4HLLZbHriiSdUr1490zkAYET9+vXVrFkz2Ww2ORwO0zkAMoCxAbiBuLg4bdq0iaMaALye1WrVxo0b9f3335tOAZABjA3ADdhsNtWpU0fNmzc3nQIARj311FN64IEHZLPZTKcAyADGBuDifvrpJ3377bcKCQmRxWIxnQMARlksFoWEhOibb77Rzz//bDoHwG0wNgAXZ7fbVb58eb388sumUwDAJbzyyisqV66c7Ha76RQAt8HYAFzYb7/9ptmzZyswMFB+fn6mcwDAJfj5+SkwMFCff/65Dhw4YDoHwC0wNgAXFh4eroIFC6pjx46mUwDApXTq1EkFCxZUeHi46RQAt8DYAFzUyZMnNXnyZPXp00e5cuUynQMALiVXrlzq3bu3Jk+erFOnTpnOAXATjA3ARY0cOVK+vr7q2bOn6RQAcEk9e/aUxWLRyJEjTacAuAnGBuCC4uPjNWrUKHXp0kUF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TipSpIjpHACACytatKg6deqkmJgYXb582XQO4HIYG8C/TJ48WefOnVNgYKDpFACAGwgMDNTZs2f1ySefmE4BXA5jA/iH5ORkhYeH65VXXlH58uVN5wAA3ECFChX0yiuvKCwsTMnJyaZzAJfC2AD+Yfbs2Tp48KBCQkJMpwAA3EhISIgOHjyoL774wnQK4FIYG8BfHA6H7Ha7WrRooTp16pjOAQC4kQcffFBPPfWUbDabHA6H6RzAZTA2gL988803+uWXX2S1Wk2nAADckNVq1S+//KJvv/3WdArgMhgbwF9sNpvq16+vpk2bmk4BALihZs2aqV69erLZbKZTAJfB2AAkbdiwQd9//71CQkJksVhM5wAA3JDFYlFISIji4uK0ceNG0zmAS2BsALp2VKNSpUpq27at6RQAgBt74YUXVLFiRY5uAH9hbMDr7d69W1999ZWCgoLk6+trOgcA4MZ8fX0VFBSkuXPnas+ePaZzAOMYG/B6YWFhKlq0qP773/+aTgEAeIAOHTqoaNGiCgsLM50CGMfYgFc7duyYPv30U/Xr1085cuQwnQMA8AA5cuRQ3759NXXqVB0/ftx0DmAUYwNeLTo6WtmzZ1f37t1NpwAAPMg777yj7NmzKzo62nQKYBRjA17r/PnzGjNmjLp37678+fObzgEAeJD8+fOrW7duGjNmjC5cuGA6BzCGsQGvNW7cOCUkJKhfv36mUwAAHqhfv366fPmyxo0bZzoFMIaxAa909epVRUVFqX379ipZsqTpHACABypVqpTat2+vyMhIXb161XQOYARjA15p2rRpOn78uIKDg02nAAA8WHBwsI4fP67p06ebTgGMYGzA66SkpCg0NFRt2rRRlSpVTOcAADxY1apV9fzzzys0NFSpqammc4Asx9iA15k/f7727Nkjq9VqOgUA4AWsVqt2796t+fPnm04BshxjA17F4XDIZrPpscceU8OGDU3nAAC8wMMPP6xHH31UNptNDofDdA6QpRgb8Co//PCDNmzYwFENAECWslqtWr9+vX788UfTKUCWYmzAq9hsNtWqVUstW7Y0nQIA8CKtWrVSzZo1ZbPZTKcAWYqxAa/xyy+/6Ouvv1ZISIgsFovpHACAF7FYLAoJCdHSpUu1detW0zlAlmFswGvY7XaVLVtWr776qukUAIAXeu2111S2bFnZ7XbTKUCWYWzA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iAg8PT2ZP39+TYciIiIiN4GHH34YT0/PUnfQriy1Ae1NmzYNT09P1q5dWyX3+933bGRkZFg3DgRo166d3e7aVeHkpZP4L/YnIyejyu7pbnYnPjQeHw+fKrtnTTh9+jSHDx+2ft+zZ09cXFxqMCIRERG5EV26dIkDBw5Yv+/evTv16tVz6DPVBrR15MgRfvnFspav2Wwucm51eXKD332yUZ0iYyMZs2VM1d3voUhGdRpVZfcTERERkaqnNmD53JDDqKrD6E6jmRU8q0ruNfuB2Tf0h0xERETkRqE2oOMo2Shk2v3TePehd3E3u5d7/J7ZyYy72Z3IhyJ5KeglB0UoIiIiIlVNbUDHULJRhNGdRhMfGk+wdzBAqR+4/PPB3sHEh8YrmxURERG5DqkNWPU0Z6MU8UnxRMREsO3YNo4nH8cosF24CRMtGrSgn28/xncZf12uOCAiIiIi9tQGLJ4miDvI5azLHEs+RmZOJm5mN3wb+JZ5Z3ARERERuT6pDWirPLmB43ZJuQHVda1Lh9s71HQYIiIiIlKN1AasOM3ZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEMo2RAREREREYdQsiEiIiIiIg6hZENERERERBxCyYaIiIiIiDiEkg0REREREXEIJRsiIiIiIuIQSjZERERERMQhlGyIiIiIiIhDKNkQERERERGHULIhIiIiIiIOoWRDREREREQcQsmGiIiIiIg4hJINERERERFxCCUbIiIiIiLiEEo2RERERETEIZRsiIiIiIiIQyjZEBERERERh1CyISIiIiIiDqFkQ0REREREHMJclkqGYQCQmprq0GBEREREROT3LT8nyM8RSlKmZCMtLQ2AZs2aVSIsERERERG5UaSlpXHrrbeWWMdklCElycvL4+zZs9SrVw+TyVRlAYqIiIiIyPXFMAzS0tJo0qQJTk4lz8ooU7IhIiIiIiJSXpogLiIiIiIiDqFkQ0REREREHELJhoiIiIiIOISSDRERERERcQglGyIiIiIi4hBKNkRERERExCGUbIiIiIiIiEP8P5oQZwn4Ill+AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "base = {\"W\": reps[0], \"X\": reps[0], \"Y\": reps[1], \"Z\": reps[3]}\n",
    "source = {\"W\": reps[0], \"X\": reps[1], \"Y\": reps[2], \"Z\": reps[2]}\n",
    "setting = equality_model.run_interchange(base, {\"WX\": source})\n",
    "equality_model.print_setting(setting)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hand Crafting an MLP to Solve Hierarchical Equality"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before we train a network to solve the hierarchical equality task, first consider an analytical solution where we define a neural network to have weights that are handcrafted to solve the task by implementing the algorithm $\\mathcal{A}$. The network is a two layer feedforward neural network that uses the ReLU function to compute the absolute difference between two vectors. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = MLPConfig(\n",
    "    h_dim=embedding_dim * 4,\n",
    "    activation_function=\"relu\",\n",
    "    n_layer=2,\n",
    "    num_classes=2,\n",
    "    pdrop=0.0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loaded model\n"
     ]
    }
   ],
   "source": [
    "config, tokenizer, handcrafted = create_mlp_classifier(config)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first layer of our handcrafted model computes:\n",
    "\n",
    "$ReLU(W_1[\\mathbf{a}, \\mathbf{b}, \\mathbf{c}, \\mathbf{d}]) = [max(\\mathbf{a}-\\mathbf{b}, 0), max(\\mathbf{b}-\\mathbf{a}, 0), max(\\mathbf{c}-\\mathbf{d}, 0), max(\\mathbf{d}-\\mathbf{c}, 0)]$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "W1 = [\n",
    "    [1, 0, -1, 0, 0, 0, 0, 0],\n",
    "    [0, 1, 0, -1, 0, 0, 0, 0],\n",
    "    [-1, 0, 1, 0, 0, 0, 0, 0],\n",
    "    [0, -1, 0, 1, 0, 0, 0, 0],\n",
    "    [0, 0, 0, 0, 1, 0, -1, 0],\n",
    "    [0, 0, 0, 0, 0, 1, 0, -1],\n",
    "    [0, 0, 0, 0, -1, 0, 1, 0],\n",
    "    [0, 0, 0, 0, 0, -1, 0, 1],\n",
    "]\n",
    "handcrafted.mlp.h[0].ff1.weight = torch.nn.Parameter(torch.FloatTensor(W1))\n",
    "handcrafted.mlp.h[0].ff1.bias = torch.nn.Parameter(\n",
    "    torch.FloatTensor([0, 0, 0, 0, 0, 0, 0, 0])\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The second layer of our handcrafted model computes:\n",
    "\n",
    "$ReLU(W_2ReLU(W_1[\\mathbf{a}, \\mathbf{b}, \\mathbf{c}, \\mathbf{d}])) = [|\\mathbf{a}-\\mathbf{b}| - |\\mathbf{c}-\\mathbf{d}|, |\\mathbf{c}-\\mathbf{d}|-|\\mathbf{a}-\\mathbf{b}|, |\\mathbf{a}-\\mathbf{b}|, |\\mathbf{c}-\\mathbf{d}|,0,0,0,0]$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "W2 = [\n",
    "    [1, -1, 0, 1, 0, 0, 0, 0],\n",
    "    [1, -1, 0, 1, 0, 0, 0, 0],\n",
    "    [1, -1, 0, 1, 0, 0, 0, 0],\n",
    "    [1, -1, 0, 1, 0, 0, 0, 0],\n",
    "    [-1, 1, 1, 0, 0, 0, 0, 0],\n",
    "    [-1, 1, 1, 0, 0, 0, 0, 0],\n",
    "    [-1, 1, 1, 0, 0, 0, 0, 0],\n",
    "    [-1, 1, 1, 0, 0, 0, 0, 0],\n",
    "]\n",
    "handcrafted.mlp.h[1].ff1.weight = torch.nn.Parameter(\n",
    "    torch.FloatTensor(W2).transpose(0, 1)\n",
    ")\n",
    "handcrafted.mlp.h[1].ff1.bias = torch.nn.Parameter(\n",
    "    torch.FloatTensor([0, 0, 0, 0, 0, 0, 0, 0])\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The third layer of our handcrafted model computes the logits:\n",
    "\n",
    "$W_3 ReLU(W_2ReLU(W_1[\\mathbf{a}, \\mathbf{b}, \\mathbf{c}, \\mathbf{d}])) = [||\\mathbf{a}-\\mathbf{b}| - |\\mathbf{c}-\\mathbf{d}|| -0.999999|\\mathbf{a}-\\mathbf{b}|-0.999999|\\mathbf{c}-\\mathbf{d}|, 0]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "W3 = [[1, 0], [1, 0], [-0.999999, 0], [-0.999999, 0], [0, 0], [0, 0], [0, 0], [0, 0]]\n",
    "handcrafted.score.weight = torch.nn.Parameter(torch.FloatTensor(W3).transpose(0, 1))\n",
    "handcrafted.score.bias = torch.nn.Parameter(torch.FloatTensor([0, 0.00000000000001]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now use the causal model of $\\mathcal{A}$ that we created to generate a labeled dataset for the hierarchical equality task and show that our handcrafted network solves the task with perfect accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_examples = 100000\n",
    "\n",
    "examples = equality_model.generate_factual_dataset(\n",
    "    n_examples, equality_model.sample_input_tree_balanced\n",
    ")\n",
    "\n",
    "X = torch.stack([example['input_ids'] for example in examples])\n",
    "y = torch.stack([example['labels'] for example in examples])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Results\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       1.00      1.00      1.00     50050\n",
      "         1.0       1.00      1.00      1.00     49950\n",
      "\n",
      "    accuracy                           1.00    100000\n",
      "   macro avg       1.00      1.00      1.00    100000\n",
      "weighted avg       1.00      1.00      1.00    100000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "preds = handcrafted.forward(inputs_embeds=X)\n",
    "\n",
    "print(\"Train Results\")\n",
    "print(classification_report(y, preds[0].argmax(1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Causal abstraction\n",
    "\n",
    "The theory of **causal abstraction** describes the conditions that must hold for the high-level tree structured algorithm to be a **simplified and faithful description** of the neural network. To perform causal abstraction analysis, we need to align high-level variables in our hypothesized algorithm $\\mathcal{A}$ with sets of low-level variables in the low-level neural network $\\mathcal{N}$. \n",
    "\n",
    "In essence: $\\mathcal{A}$ is a causal abstraction of a $\\mathcal{N}$ if and only if $\\mathcal{A}$ and $\\mathcal{N}$ provides the same output for all interchange interventions that target aligned variables.\n",
    "\n",
    "For our handcrafted network, we align the first four neurons in the first feed-forward layer with the high-level variable 'WX' and align the other four neurons in that layer with 'YZ'. Below, we create an IntervenableConfig that allows us to taget the first four and last four neurons of the first layer for an interchange intervention. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = IntervenableConfig(\n",
    "    model_type=type(handcrafted),\n",
    "    representations=[\n",
    "        RepresentationConfig(\n",
    "            0,  # layer\n",
    "            \"block_output\",  # intervention type\n",
    "            subspace_partition=[[0, 4], [4, 8]],\n",
    "        ),\n",
    "        RepresentationConfig(\n",
    "            0,  # layer\n",
    "            \"block_output\",  # intervention type\n",
    "            subspace_partition=[[0, 4], [4, 8]],\n",
    "        ),\n",
    "    ],\n",
    "    intervention_types=VanillaIntervention,\n",
    ")\n",
    "handcrafted = IntervenableModel(config, handcrafted)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we create a counterfactual equality dataset that includes interchange intervention examples. We first define a function that create an id for the three possible high-level interventions, namely targetting 'WX', targetting 'YZ', and targetting them both."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def intervention_id(intervention):\n",
    "    if \"WX\" in intervention and \"YZ\" in intervention:\n",
    "        return 2\n",
    "    if \"WX\" in intervention:\n",
    "        return 0\n",
    "    if \"YZ\" in intervention:\n",
    "        return 1\n",
    "\n",
    "\n",
    "data_size = 2048\n",
    "batch_size = 16\n",
    "dataset = equality_model.generate_counterfactual_dataset(\n",
    "    data_size,\n",
    "    intervention_id,\n",
    "    batch_size,\n",
    "    device=\"cuda:0\",\n",
    "    sampler=equality_model.sample_input_tree_balanced,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This dataset has the following components:\n",
    "\n",
    "* `input_ids`: a regular set of train examples\n",
    "* `base_labels`: a regular set of train labels\n",
    "* `source_input_ids`: sets additional training inputs sets (here, two sets) for interchange interventions\n",
    "* `labels`: a list of labels if interchange interventions are performed with 'source_input_ids'\n",
    "* `intervention_id`: a list of intervention sites (here, all `0` corresponding to our key for \"V1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([ 0.4700,  0.3500,  0.4700,  0.3500,  0.7800, -0.8300, -0.5600,  0.1800],\n",
      "       device='cuda:0')\n",
      "tensor([[-0.1600, -0.9400,  0.6600,  0.2400,  0.0700,  0.9500,  0.0700,  0.9500],\n",
      "        [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]],\n",
      "       device='cuda:0')\n",
      "tensor([0.], device='cuda:0')\n",
      "tensor([1.], device='cuda:0')\n",
      "tensor([0], device='cuda:0')\n"
     ]
    }
   ],
   "source": [
    "print(dataset[0][\"input_ids\"])\n",
    "print(dataset[0][\"source_input_ids\"])\n",
    "print(dataset[0][\"base_labels\"])\n",
    "print(dataset[0][\"labels\"])\n",
    "print(dataset[0][\"intervention_id\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To evaluate the model on this dataset, we loop through batches and peform interchange interventions based on the intervention_id. \n",
    "* When the id is 0, the first four neurons in the first layer are targetted ('WX' is targetted at the high-level)\n",
    "* When the id is 1, the last four neurons in the first layer are targetted ('YZ' is targetted at the high-level)\n",
    "* When the id is 2, all of the neurons in the first layer are targetted ('WX' and 'YZ' are both targetted at the high-level) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "handcrafted.to(\"cuda:0\")\n",
    "for parameter in handcrafted.get_trainable_parameters():\n",
    "    parameter.to(\"cuda:0\")\n",
    "preds = []\n",
    "for batch in DataLoader(dataset, batch_size):\n",
    "    batch[\"input_ids\"] = batch[\"input_ids\"].unsqueeze(1)\n",
    "    batch[\"source_input_ids\"] = batch[\"source_input_ids\"].unsqueeze(2)\n",
    "    if batch[\"intervention_id\"][0] == 2:  # Intervention on both high-level variables\n",
    "        _, counterfactual_outputs = handcrafted(\n",
    "            {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "            [\n",
    "                {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]},\n",
    "                {\"inputs_embeds\": batch[\"source_input_ids\"][:, 1]},\n",
    "            ],\n",
    "            {\n",
    "                \"sources->base\": (\n",
    "                    [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                    [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                )\n",
    "            },\n",
    "            subspaces=[[[0]] * batch_size, [[1]] * batch_size],\n",
    "        )\n",
    "    elif (\n",
    "        batch[\"intervention_id\"][0] == 0\n",
    "    ):  # Intervention on just the high-level variable 'WX'\n",
    "        _, counterfactual_outputs = handcrafted(\n",
    "            {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "            [{\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}, None],\n",
    "            {\"sources->base\": ([[[0]] * batch_size, None], [[[0]] * batch_size, None])},\n",
    "            subspaces=[[[0]] * batch_size, None],\n",
    "        )\n",
    "    elif (\n",
    "        batch[\"intervention_id\"][0] == 1\n",
    "    ):  # Intervention on just the high-level variable 'YZ'\n",
    "        _, counterfactual_outputs = handcrafted(\n",
    "            {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "            [None, {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}],\n",
    "            {\"sources->base\": ([None, [[0]] * batch_size], [None, [[0]] * batch_size])},\n",
    "            subspaces=[None, [[1]] * batch_size],\n",
    "        )\n",
    "    preds.append(counterfactual_outputs[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "preds = torch.cat(preds)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Below, we can see that our handcrafted neural network is a perfect implementation of the high-level algorithm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       1.00      1.00      1.00       997\n",
      "         1.0       1.00      1.00      1.00      1051\n",
      "\n",
      "    accuracy                           1.00      2048\n",
      "   macro avg       1.00      1.00      1.00      2048\n",
      "weighted avg       1.00      1.00      1.00      2048\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(\n",
    "    classification_report(\n",
    "        torch.tensor([x[\"labels\"] for x in dataset]).cpu(), preds.argmax(1).cpu()\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training an MLP to Solve Hierarchical Equality\n",
    "\n",
    "We've now seen how to perform causal abstraction analysis on a simple handcrafted neural networks. We turn now to training a neural network to perform the hierarchical equality task with a 4 dimensional vector embedding for each object. We define an input sampler to provide an infinite stream of new entities, rather than relying on a fixed set of vector representations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "embedding_dim = 4\n",
    "\n",
    "\n",
    "def input_sampler():\n",
    "    A = randvec(4)\n",
    "    B = randvec(4)\n",
    "    C = randvec(4)\n",
    "    D = randvec(4)\n",
    "    x = random.randint(1, 4)\n",
    "    if x == 1:\n",
    "        return {\"W\": A, \"X\": B, \"Y\": C, \"Z\": D}\n",
    "    elif x == 2:\n",
    "        return {\"W\": A, \"X\": A, \"Y\": B, \"Z\": B}\n",
    "    elif x == 3:\n",
    "        return {\"W\": A, \"X\": A, \"Y\": C, \"Z\": D}\n",
    "    elif x == 4:\n",
    "        return {\"W\": A, \"X\": B, \"Y\": C, \"Z\": C}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_examples = 1048576\n",
    "batch_size = 1024\n",
    "\n",
    "examples = equality_model.generate_factual_dataset(n_examples, input_sampler)\n",
    "\n",
    "X = torch.stack([example['input_ids'] for example in examples])\n",
    "y = torch.stack([example['labels'] for example in examples])\n",
    "\n",
    "# X = X.unsqueeze(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The examples in this dataset are 8-dimensional vectors: the concatenation of 4 2-dimensional vectors. Here's the first example with its label:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([-0.7200,  0.6300,  1.0000,  0.6900, -0.7200,  0.6300,  1.0000,  0.6900,\n",
       "          0.0800, -0.8800, -0.0400, -0.0400, -0.5200, -0.8500, -0.6400,  0.6400]),\n",
       " tensor([0.]))"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X[0], y[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The label for this example is determined by whether the equality value for the first two inputs matches the equality value for the second two inputs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = torch.equal(X[0][:embedding_dim], X[0][embedding_dim : embedding_dim * 2])\n",
    "\n",
    "left"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "right = torch.equal(\n",
    "    X[0][embedding_dim * 2 : embedding_dim * 3], X[0][embedding_dim * 3 :]\n",
    ")\n",
    "\n",
    "right"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int(left == right)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define a three layer neural network with a ReLU activation function this task:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loaded model\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "MLPForClassification(\n",
       "  (mlp): MLPModel(\n",
       "    (dropout): Dropout(p=0.0, inplace=False)\n",
       "    (h): ModuleList(\n",
       "      (0-2): 3 x MLPBlock(\n",
       "        (ff1): Linear(in_features=16, out_features=16, bias=True)\n",
       "        (act): ReLU()\n",
       "        (dropout): Dropout(p=0.0, inplace=False)\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (score): Linear(in_features=16, out_features=2, bias=True)\n",
       ")"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "config = MLPConfig(\n",
    "    h_dim=embedding_dim * 4,\n",
    "    activation_function=\"relu\",\n",
    "    n_layer=3,\n",
    "    num_classes=2,\n",
    "    pdrop=0.0,\n",
    ")\n",
    "config, tokenizer, trained = create_mlp_classifier(config)\n",
    "trained.train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_ds = Dataset.from_dict(\n",
    "    {\n",
    "        \"labels\": [\n",
    "            torch.FloatTensor([0, 1]) if i == 1 else torch.FloatTensor([1, 0])\n",
    "            for i in y\n",
    "        ],\n",
    "        \"inputs_embeds\": X,\n",
    "    }\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import TrainingArguments, Trainer\n",
    "\n",
    "training_args = TrainingArguments(\n",
    "    output_dir=\"test_trainer\",\n",
    "    evaluation_strategy=\"epoch\",\n",
    "    learning_rate=0.001,\n",
    "    num_train_epochs=3,\n",
    "    per_device_train_batch_size=batch_size,\n",
    "    per_device_eval_batch_size=batch_size,\n",
    "    report_to=\"none\",\n",
    ")\n",
    "\n",
    "trainer = Trainer(\n",
    "    model=trained,\n",
    "    args=training_args,\n",
    "    train_dataset=train_ds,\n",
    "    eval_dataset=train_ds,\n",
    "    compute_metrics=lambda x: {\n",
    "        \"accuracy\": classification_report(\n",
    "            x[0].argmax(1), x[1].argmax(1), output_dict=True\n",
    "        )[\"accuracy\"]\n",
    "    },\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This neural network achieves perfect performance on its train set:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "267ad9a4be754be89e338aa6240214e4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3072 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Could not estimate the number of tokens of the input, floating-point operations will not be computed\n",
      "Checkpoint destination directory test_trainer\\checkpoint-500 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.6401, 'grad_norm': 0.23116283118724823, 'learning_rate': 0.0008372395833333334, 'epoch': 0.49}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Checkpoint destination directory test_trainer\\checkpoint-1000 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.195, 'grad_norm': 0.18332688510417938, 'learning_rate': 0.0006744791666666667, 'epoch': 0.98}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6718015efcb34628b758ff359877ff36",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/1024 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'eval_loss': 0.07157168537378311, 'eval_accuracy': 0.9790763854980469, 'eval_runtime': 37.061, 'eval_samples_per_second': 28293.236, 'eval_steps_per_second': 27.63, 'epoch': 1.0}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Checkpoint destination directory test_trainer\\checkpoint-1500 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0472, 'grad_norm': 0.15438705682754517, 'learning_rate': 0.00051171875, 'epoch': 1.46}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Checkpoint destination directory test_trainer\\checkpoint-2000 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.025, 'grad_norm': 0.1841142624616623, 'learning_rate': 0.00034895833333333334, 'epoch': 1.95}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ade15e1911a840ceb47b8c372e241568",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/1024 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'eval_loss': 0.019501574337482452, 'eval_accuracy': 0.9946937561035156, 'eval_runtime': 37.7091, 'eval_samples_per_second': 27806.989, 'eval_steps_per_second': 27.155, 'epoch': 2.0}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Checkpoint destination directory test_trainer\\checkpoint-2500 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0177, 'grad_norm': 0.18471458554267883, 'learning_rate': 0.00018619791666666665, 'epoch': 2.44}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Checkpoint destination directory test_trainer\\checkpoint-3000 already exists and is non-empty. Saving will proceed but saved results may be invalid.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'loss': 0.0149, 'grad_norm': 0.15878142416477203, 'learning_rate': 2.34375e-05, 'epoch': 2.93}\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6611af998ca848efbcb7ad9afb3bc344",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/1024 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'eval_loss': 0.014224954880774021, 'eval_accuracy': 0.9962148666381836, 'eval_runtime': 42.0755, 'eval_samples_per_second': 24921.316, 'eval_steps_per_second': 24.337, 'epoch': 3.0}\n",
      "{'train_runtime': 257.663, 'train_samples_per_second': 12208.692, 'train_steps_per_second': 11.923, 'train_loss': 0.15329135081265122, 'epoch': 3.0}\n"
     ]
    }
   ],
   "source": [
    "_ = trainer.train()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we create a separate causal model with vector representations distinct from those used in training:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hi!\n"
     ]
    }
   ],
   "source": [
    "variables = [\"W\", \"X\", \"Y\", \"Z\", \"WX\", \"YZ\", \"O\"]\n",
    "\n",
    "number_of_test_entities = 100\n",
    "\n",
    "reps = [randvec(embedding_dim) for _ in range(number_of_test_entities)]\n",
    "values = {variable: reps for variable in [\"W\", \"X\", \"Y\", \"Z\"]}\n",
    "values[\"WX\"] = [True, False]\n",
    "values[\"YZ\"] = [True, False]\n",
    "values[\"O\"] = [True, False]\n",
    "\n",
    "parents = {\n",
    "    \"W\": [],\n",
    "    \"X\": [],\n",
    "    \"Y\": [],\n",
    "    \"Z\": [],\n",
    "    \"WX\": [\"W\", \"X\"],\n",
    "    \"YZ\": [\"Y\", \"Z\"],\n",
    "    \"O\": [\"WX\", \"YZ\"],\n",
    "}\n",
    "\n",
    "\n",
    "def FILLER():\n",
    "    return reps[0]\n",
    "\n",
    "\n",
    "functions = {\n",
    "    \"W\": FILLER,\n",
    "    \"X\": FILLER,\n",
    "    \"Y\": FILLER,\n",
    "    \"Z\": FILLER,\n",
    "    \"WX\": lambda x, y: np.array_equal(x, y),\n",
    "    \"YZ\": lambda x, y: np.array_equal(x, y),\n",
    "    \"O\": lambda x, y: x == y,\n",
    "}\n",
    "\n",
    "pos = {\n",
    "    \"W\": (0, 0),\n",
    "    \"X\": (1, 0.1),\n",
    "    \"Y\": (2, 0.2),\n",
    "    \"Z\": (3, 0),\n",
    "    \"WX\": (1, 2),\n",
    "    \"YZ\": (2, 2),\n",
    "    \"O\": (1.5, 3),\n",
    "}\n",
    "\n",
    "\n",
    "test_equality_model = CausalModel(variables, values, parents, functions, pos=pos)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our trained model generalizes perfectly this test set consisting of distinct vectors:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Results\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "171e7809005a4020ab22e408905323ff",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       0.99      1.00      1.00      5026\n",
      "         1.0       1.00      0.99      1.00      4974\n",
      "\n",
      "    accuracy                           1.00     10000\n",
      "   macro avg       1.00      1.00      1.00     10000\n",
      "weighted avg       1.00      1.00      1.00     10000\n",
      "\n"
     ]
    }
   ],
   "source": [
    "examples = test_equality_model.generate_factual_dataset(10000, input_sampler)\n",
    "print(\"Test Results\")\n",
    "\n",
    "test_ds = Dataset.from_dict(\n",
    "    {\n",
    "        \"labels\": [\n",
    "            torch.FloatTensor([0, 1]) if example['labels'].item() == 1 else torch.FloatTensor([1, 0])\n",
    "            for example in examples\n",
    "        ],\n",
    "        \"inputs_embeds\": torch.stack([example['input_ids'] for example in examples]),\n",
    "    }\n",
    ")\n",
    "\n",
    "test_preds = trainer.predict(test_ds)\n",
    "y_test = [example['labels'].item() for example in examples]\n",
    "\n",
    "print(classification_report(y_test, test_preds[0].argmax(1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Does it implement our high-level model of the problem, though?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Distributed Alignment Search\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We previously handcrafted the weights of a network so the two high-level variables are perfectly stored in two non-overlapping sets of neurons in the first layer of the network. However, the trained network won't have axis aligned representations of high-level concepts. Rather, the two high-level variables will be encoded in multidimensional linear subspaces of the first layer in the network.  \n",
    "\n",
    "To learn these subspaces, we define an IntervenableConfig that allows us to target the first layer of in the network after it has been rotated by an orthogonal matrix:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "config = IntervenableConfig(\n",
    "    model_type=type(trained),\n",
    "    representations=[\n",
    "        RepresentationConfig(\n",
    "            0,  # layer\n",
    "            \"block_output\",  # intervention type\n",
    "            \"pos\",  # intervention unit is now aligne with tokens\n",
    "            1,  # max number of unit\n",
    "            subspace_partition=None,  # binary partition with equal sizes\n",
    "            intervention_link_key=0,\n",
    "        ),\n",
    "        RepresentationConfig(\n",
    "            0,  # layer\n",
    "            \"block_output\",  # intervention type\n",
    "            \"pos\",  # intervention unit is now aligne with tokens\n",
    "            1,  # max number of unit\n",
    "            subspace_partition=None,  # binary partition with equal sizes,\n",
    "            intervention_link_key=0,\n",
    "        ),\n",
    "    ],\n",
    "    intervention_types=RotatedSpaceIntervention,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:Detected use_fast=True means the intervention location will be static within a batch.\n",
      "\n",
      "In case multiple location tags are passed only the first one will be considered\n"
     ]
    }
   ],
   "source": [
    "intervenable = IntervenableModel(config, trained, use_fast=True)\n",
    "intervenable.set_device(\"cuda\")\n",
    "intervenable.disable_model_gradients()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "epochs = 10\n",
    "gradient_accumulation_steps = 1\n",
    "total_step = 0\n",
    "target_total_step = len(dataset) * epochs\n",
    "\n",
    "t_total = int(len(dataset) * epochs)\n",
    "optimizer_params = []\n",
    "for k, v in intervenable.interventions.items():\n",
    "    optimizer_params += [{\"params\": v.rotate_layer.parameters()}]\n",
    "    break\n",
    "optimizer = torch.optim.Adam(optimizer_params, lr=0.001)\n",
    "\n",
    "\n",
    "def compute_metrics(eval_preds, eval_labels):\n",
    "    total_count = 0\n",
    "    correct_count = 0\n",
    "    for eval_pred, eval_label in zip(eval_preds, eval_labels):\n",
    "        total_count += 1\n",
    "        correct_count += eval_pred == eval_label\n",
    "    accuracy = float(correct_count) / float(total_count)\n",
    "    return {\"accuracy\": accuracy}\n",
    "\n",
    "\n",
    "def compute_loss(outputs, labels):\n",
    "    CE = torch.nn.CrossEntropyLoss()\n",
    "    return CE(outputs, labels)\n",
    "\n",
    "\n",
    "def batched_random_sampler(data):\n",
    "    batch_indices = [_ for _ in range(int(len(data) / batch_size))]\n",
    "    random.shuffle(batch_indices)\n",
    "    for b_i in batch_indices:\n",
    "        for i in range(b_i * batch_size, (b_i + 1) * batch_size):\n",
    "            yield i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "def input_sampler(*args, **kwargs):\n",
    "    A = randvec(4)\n",
    "    B = randvec(4)\n",
    "    C = randvec(4)\n",
    "    D = randvec(4)\n",
    "    if kwargs.get('output_var', None) is None:\n",
    "        return random.choice([\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": D},\n",
    "            {\"W\": A, \"X\": A, \"Y\": B, \"Z\": B},\n",
    "            {\"W\": A, \"X\": A, \"Y\": C, \"Z\": D},\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": C}\n",
    "        ])\n",
    "    elif kwargs['output_var'] == 'WX' and kwargs['output_var_value']:\n",
    "        return random.choice([\n",
    "            {\"W\": A, \"X\": A, \"Y\": C, \"Z\": D},\n",
    "            {\"W\": A, \"X\": A, \"Y\": C, \"Z\": C}\n",
    "        ])\n",
    "    elif kwargs['output_var'] == 'WX' and not kwargs['output_var_value']:\n",
    "        return random.choice([\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": D},\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": C}\n",
    "        ])\n",
    "    elif kwargs['output_var'] == 'YZ' and kwargs['output_var_value']:\n",
    "        return random.choice([\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": C},\n",
    "            {\"W\": A, \"X\": A, \"Y\": C, \"Z\": C}\n",
    "        ])\n",
    "    else:\n",
    "        return random.choice([\n",
    "            {\"W\": A, \"X\": B, \"Y\": C, \"Z\": D},\n",
    "            {\"W\": A, \"X\": A, \"Y\": C, \"Z\": D}\n",
    "        ])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We again generate a counterfactual dataset using our high-level causal model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_examples = 1280000\n",
    "batch_size = 6400\n",
    "train_dataset = equality_model.generate_counterfactual_dataset(\n",
    "    n_examples, intervention_id, batch_size, sampler=input_sampler\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then we train the orthgonal matrix to be such that the first four dimensions in the rotated space encode the high-level variable 'WX' and the second four dimensions encode the high-level variable 'YZ'. \n",
    "\n",
    "Again, we check the intervention_id for each batch of training data in order to determine whether to intervene of the first four rotated dimensions ('WX' is targetted at the high-level), the last four rotated dimensions ('YZ' is targetted at the high-level), or all of the dimensions ('WX' and 'YZ' are both targetted at the high-level). \n",
    "\n",
    "We can train the rotation matrix such that we get perfect interchange intervention accuracy, meaning the trained network perfectly implements the high-level algorithm on the training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "intervention trainable parameters:  256\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch: 0: 0it [00:00, ?it/s] [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Epoch: 0: 200it [01:17,  2.59it/s, loss=tensor(0.4580, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.872]\n",
      "Epoch: 1: 200it [00:54,  3.69it/s, loss=tensor(0.4646, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.89] \n",
      "Epoch: 2: 200it [00:53,  3.71it/s, loss=tensor(0.1925, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.962]\n",
      "Epoch: 3: 200it [00:53,  3.71it/s, loss=tensor(0.5047, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.837]\n",
      "Epoch: 4: 200it [00:54,  3.70it/s, loss=tensor(0.1448, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.969]\n",
      "Epoch: 5: 200it [00:52,  3.81it/s, loss=tensor(0.1444, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.967]\n",
      "Epoch: 6: 200it [00:58,  3.40it/s, loss=tensor(0.1562, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.97] \n",
      "Epoch: 7: 200it [01:04,  3.09it/s, loss=tensor(0.1703, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.958]\n",
      "Epoch: 8: 200it [01:05,  3.07it/s, loss=tensor(0.1553, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.959]\n",
      "Epoch: 9: 200it [01:04,  3.10it/s, loss=tensor(0.1505, device='cuda:0', grad_fn=<NllLossBackward0>), acc=0.967]\n",
      "Epoch: 100%|██████████| 10/10 [09:59<00:00, 59.91s/it]\n"
     ]
    }
   ],
   "source": [
    "intervenable.model.train()  # train enables drop-off but no grads\n",
    "print(\"intervention trainable parameters: \", intervenable.count_parameters())\n",
    "train_iterator = trange(0, int(epochs), desc=\"Epoch\")\n",
    "\n",
    "for epoch in train_iterator:\n",
    "    epoch_iterator = tqdm(\n",
    "        DataLoader(\n",
    "            train_dataset,\n",
    "            batch_size=batch_size,\n",
    "            sampler=batched_random_sampler(train_dataset),\n",
    "        ),\n",
    "        desc=f\"Epoch: {epoch}\",\n",
    "        position=0,\n",
    "        leave=True,\n",
    "    )\n",
    "    for batch in epoch_iterator:\n",
    "        batch[\"input_ids\"] = batch[\"input_ids\"].unsqueeze(1)\n",
    "        batch[\"source_input_ids\"] = batch[\"source_input_ids\"].unsqueeze(2)\n",
    "        batch_size = batch[\"input_ids\"].shape[0]\n",
    "        for k, v in batch.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                batch[k] = v.to(\"cuda\")\n",
    "\n",
    "        if batch[\"intervention_id\"][0] == 2:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [\n",
    "                    {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]},\n",
    "                    {\"inputs_embeds\": batch[\"source_input_ids\"][:, 1]},\n",
    "                ],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                        [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    [[_ for _ in range(0, embedding_dim * 2)]] * batch_size,\n",
    "                    [[_ for _ in range(embedding_dim * 2, embedding_dim * 4)]]\n",
    "                    * batch_size,\n",
    "                ],\n",
    "            )\n",
    "        elif batch[\"intervention_id\"][0] == 0:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [{\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}, None],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [[[0]] * batch_size, None],\n",
    "                        [[[0]] * batch_size, None],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    [[_ for _ in range(0, embedding_dim * 2)]] * batch_size,\n",
    "                    None,\n",
    "                ],\n",
    "            )\n",
    "        elif batch[\"intervention_id\"][0] == 1:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [None, {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [None, [[0]] * batch_size],\n",
    "                        [None, [[0]] * batch_size],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    None,\n",
    "                    [[_ for _ in range(embedding_dim * 2, embedding_dim * 4)]]\n",
    "                    * batch_size,\n",
    "                ],\n",
    "            )\n",
    "        eval_metrics = compute_metrics(\n",
    "            counterfactual_outputs[0].argmax(1), batch[\"labels\"].squeeze()\n",
    "        )\n",
    "\n",
    "        # loss and backprop\n",
    "        loss = compute_loss(\n",
    "            counterfactual_outputs[0], batch[\"labels\"].squeeze().to(torch.long)\n",
    "        )\n",
    "\n",
    "        epoch_iterator.set_postfix({\"loss\": loss, \"acc\": eval_metrics[\"accuracy\"]})\n",
    "\n",
    "        if gradient_accumulation_steps > 1:\n",
    "            loss = loss / gradient_accumulation_steps\n",
    "        loss.backward()\n",
    "        if total_step % gradient_accumulation_steps == 0:\n",
    "            optimizer.step()\n",
    "            intervenable.set_zero_grad()\n",
    "        total_step += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What's more, is it generalizes unseen test data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_dataset = test_equality_model.generate_counterfactual_dataset(\n",
    "    10000, intervention_id, batch_size, device=\"cuda:0\", sampler=input_sampler\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Test:   0%|          | 0/2 [00:00<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Test: 100%|██████████| 2/2 [00:00<00:00, 14.01it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       0.98      0.96      0.97      6407\n",
      "         1.0       0.96      0.98      0.97      6393\n",
      "\n",
      "    accuracy                           0.97     12800\n",
      "   macro avg       0.97      0.97      0.97     12800\n",
      "weighted avg       0.97      0.97      0.97     12800\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "eval_labels = []\n",
    "eval_preds = []\n",
    "with torch.no_grad():\n",
    "    epoch_iterator = tqdm(DataLoader(test_dataset, batch_size), desc=f\"Test\")\n",
    "    for step, batch in enumerate(epoch_iterator):\n",
    "        for k, v in batch.items():\n",
    "            if v is not None and isinstance(v, torch.Tensor):\n",
    "                batch[k] = v.to(\"cuda\")\n",
    "        batch[\"input_ids\"] = batch[\"input_ids\"].unsqueeze(1)\n",
    "        batch[\"source_input_ids\"] = batch[\"source_input_ids\"].unsqueeze(2)\n",
    "        if batch[\"intervention_id\"][0] == 2:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [\n",
    "                    {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]},\n",
    "                    {\"inputs_embeds\": batch[\"source_input_ids\"][:, 1]},\n",
    "                ],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                        [[[0]] * batch_size, [[0]] * batch_size],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    [[_ for _ in range(0, embedding_dim * 2)]] * batch_size,\n",
    "                    [[_ for _ in range(embedding_dim * 2, embedding_dim * 4)]]\n",
    "                    * batch_size,\n",
    "                ],\n",
    "            )\n",
    "        elif batch[\"intervention_id\"][0] == 0:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [{\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}, None],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [[[0]] * batch_size, None],\n",
    "                        [[[0]] * batch_size, None],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    [[_ for _ in range(0, embedding_dim * 2)]] * batch_size,\n",
    "                    None,\n",
    "                ],\n",
    "            )\n",
    "        elif batch[\"intervention_id\"][0] == 1:\n",
    "            _, counterfactual_outputs = intervenable(\n",
    "                {\"inputs_embeds\": batch[\"input_ids\"]},\n",
    "                [None, {\"inputs_embeds\": batch[\"source_input_ids\"][:, 0]}],\n",
    "                {\n",
    "                    \"sources->base\": (\n",
    "                        [None, [[0]] * batch_size],\n",
    "                        [None, [[0]] * batch_size],\n",
    "                    )\n",
    "                },\n",
    "                subspaces=[\n",
    "                    None,\n",
    "                    [[_ for _ in range(embedding_dim * 2, embedding_dim * 4)]]\n",
    "                    * batch_size,\n",
    "                ],\n",
    "            )\n",
    "        eval_labels += [batch[\"labels\"]]\n",
    "        eval_preds += [torch.argmax(counterfactual_outputs[0], dim=1)]\n",
    "print(classification_report(torch.cat(eval_labels).cpu(), torch.cat(eval_preds).cpu()))"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "933b0a94e0d88ac80a17cb26ca3d8d36930c12815b02a2885c1925c2b1ae3c33"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
